【发布时间】:2017-05-21 01:26:39
【问题描述】:
我有一个从数据生成 JSON 文件的脚本。 我有第二个脚本,它从目录中读取文件以仅获取 JSON 文件并将它们插入 DB。
问题是第二个脚本从我生成的文件中检测到“application/octet-stream”MIME 类型而不是application/json
我不想允许application/octet-stream MIME 类型,因为它可以是任何东西(出于安全原因:第二个脚本加载目录中的所有json 文件(不仅是生成的文件))。
那么无论如何要“设置”文件的 MIME 类型吗?
生成文件的代码:
if($r_handle = fopen($s_file_name, 'w+')){
fwrite($r_handle, json_encode($o_datas, JSON_HEX_QUOT | JSON_HEX_TAG));
fclose($r_handle);
return;
}
读取 JSON 文件的代码:
$o_finfo = finfo_open(FILEINFO_MIME_TYPE);
$a_mimes =& get_mimes();
if(is_dir($s_dir) && $r_handle = opendir($s_dir)){
while($s_file = readdir($r_handle)){
$s_file_path = $s_dir.$s_file;
$s_mime = finfo_file($o_finfo, $s_file_path);
if(!in_array($s_file, array('.', '..')) && in_array($s_mime, $a_mimes['json'])){
// Some code
}
}
}
【问题讨论】:
-
不,您不能“设置” MIME 类型。 Finfo 只是尽其所能猜测。 “application/octet-stream”几乎意味着“不知道,我猜这是一个文件”。哪个是技术上的正确答案……
-
如果我理解这个问题,你可以在 PHP 中设置
header()和fopen()文件中的内容类型,对吧? -
@SteveKnau : 我可以先
header()然后fopen()然后fwrite()然后fclose()吗? -
那不会有任何用处,不。
-
专门针对具有不同文件扩展名的 JSON 和类似数据格式:尝试将其解析为 JSON。如果失败,则可能是文件扩展名错误或文件损坏。当然尽量不要让你的服务器在这个过程中被利用,例如通过尝试将 2GB 的 JSON 文件解析到内存中……
标签: php json mime-types