标签:php json mime-types mime
我知道json文件的正确MIME类型是applicattion / json,可以通过这篇文章What is the correct JSON content type?确认.
但是,我想知道为什么我的PHP安装返回text / plain.我需要在解析json文件之前测试正确的mime.
我有以下代码
$fileinfo = new finfo();
$fileType = $fileinfo->file( $_FILES['tmp_name'], FILEINFO_MIME_TYPE );
其中$fileType返回text / plain而不是applicattion / json.
同样,$_FILES [‘type’]返回application / octet-stream而不是applicattion / 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,
})
解决方法:
finfo通过内容识别文件类型,而不是文件扩展名.
只能正确识别带签名的文件.否则,将根据其内容将其标识为text / plain(ASCII)或application / octet-stream(Binary).
不幸的是,JSON编码的内容没有签名,因此被标记为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);
标签:php,json,mime-types,mime 来源: https://codeday.me/bug/20190724/1524569.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。