Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么PHP没有为json文件返回正确的mime?_Php_Json_Mime Types_Mime - Fatal编程技术网

为什么PHP没有为json文件返回正确的mime?

为什么PHP没有为json文件返回正确的mime?,php,json,mime-types,mime,Php,Json,Mime Types,Mime,我知道json文件的正确MIME类型是application/json,这一点可以在本文中得到证实 然而,我想知道为什么我的PHP安装返回text/plain。在解析json文件之前,我需要测试正确的mime 我有以下代码 $fileinfo = new finfo(); $fileType = $fileinfo->file( $_FILES['tmp_name'], FILEINFO_MIME_TYPE ); 其中,$fileType返回text/plain,而不是applicati

我知道json文件的正确MIME类型是
application/json
,这一点可以在本文中得到证实

然而,我想知道为什么我的PHP安装返回
text/plain
。在解析json文件之前,我需要测试正确的mime

我有以下代码

$fileinfo = new finfo();
$fileType = $fileinfo->file( $_FILES['tmp_name'], FILEINFO_MIME_TYPE );
其中,
$fileType
返回
text/plain
,而不是
application/json

同样,
$\u FILES['type']
返回
application/octet-stream
,而不是
application/json

我错过了什么

编辑

我通过jQuery ajax发送文件:

var formData = new FormData( $(form)[0] );
var jsonFile = $( 'input:file[name=contents]', form ).get(0).files[0];

formData.append( 'jsonFile', jsonFile );

$.ajax({ 

    type: 'POST',
    url: 'url',
    data: formData,
    dataType:'json',
    enctype : 'multipart/form-data',
    processData: false,
    contentType : false,
    encode:true,
})

我不确定你的实际问题是什么。它指的是获得某种MIME类型的两种方法

Fileinfo使用libmagic。正如名字所示,这里发生了神奇的事情。本质上,它查看文件并尝试猜测文件可能是什么类型。如果它以
GIF89a
开头,它将报告image/gif。猜测往往是错误的,但可能已经足够了

$\u文件
包含客户端(web浏览器)正在发送的信息。其中的类型是浏览器的内容。这通常是完全无用的


如果你需要一个精确的类型,你必须确保这一点自己。如何执行此操作取决于文件来自何处以及您计划执行的操作。i、 如果这是来自一个值得信赖的管理员,你可以查看文件扩展名。对于从不太信任的用户上传的图像(我希望您不打算接受从不完全信任的用户上传的javascript文件来执行),一个好方法是实际尝试打开图像,甚至可能对其重新编码(即删除exif数据)

如果您使用的是*nix系统,您可以尝试使用
file
命令。

finfo
通过内容而不是文件扩展名标识文件类型

只有签名为的文件才能正确识别。否则,将根据其内容将其标识为
文本/普通
(ASCII)或
应用程序/八位字节流
(二进制)

不幸的是,JSON编码的内容没有签名,因此id为
text/plain
application/octet-stream

如需进一步阅读,请访问:-

希望这有帮助

[编辑1]下面是我的上述测试脚本。干杯

$filename = "test.json";

$finfo = finfo_open(FILEINFO_MIME_TYPE);

file_put_contents($filename, "<?php \n");
printf("%s\n", finfo_file($finfo, $filename));

file_put_contents($filename, "@echo off\n");
printf("%s\n", finfo_file($finfo, $filename));

file_put_contents($filename, json_encode(array("a" => "1")));
printf("%s\n", finfo_file($finfo, $filename));

file_put_contents($filename, "\xff");
printf("%s\n", finfo_file($finfo, $filename));

finfo_close($finfo);
$filename=“test.json”;
$finfo=finfo\u open(FILEINFO\u MIME\u类型);

file\u put\u contents($filename,“文件的内容是什么?@StephenAdelakun object//file?它们不一样..寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现问题所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。JSON文件是
纯/文本
,但当它通过internet传输时,允许接收代码将其区分为sp具体地说,是一个JSON纯文本文件,它前面有一个标题,表示它是
application/JSON
。在测试
$\u文件['tmp\u name']的文件中没有嵌入mime类型
临时下载文件。没有与该文件或任何其他文件相关的mime类型。这里没有问题需要解决。我也不确定您是否清楚地阅读了我的问题。json文件的正确mime类型是
application/json
我需要对此进行测试,那么为什么PHP不返回此文件,尽管使用
.json
,该文件包含格式良好的json内容,并使用不同的测试方法返回
text/plain
。对于回答者来说,在没有耐心了解OP想要什么的情况下跳到OP并注销是很常见的。这是一个例外。这与“*nix”到底有什么关系?我不认为(知道)如果*dows系统上有任何
文件
命令。。。