为什么PHP没有为json文件返回正确的mime?
我知道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
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系统上有任何文件命令。。。