【发布时间】:2012-05-20 10:58:08
【问题描述】:
我知道(从这个问题的答案:.rar, .zip files MIME Type)大多数人检查 PHP 中的 zip 文件为 application/zip 或 application/octet-stream,但我对此有几个问题:
- 只检查
application/octet-stream是否安全(鉴于application/octet-stream可用于描述更多的文件类型而不仅仅是zip!)。我知道我也可以通过其他方式检查文件,但我认为我应该尽量保持一切简单 - 我尝试尽可能多地检查不同的实际拉链类型;但是,有些会产生一些意想不到的结果。我发现 1 的 mime 类型为
application/x-external-editor,但 PHP 处理它时遇到问题(尽管我得到的唯一错误是Warning: ZipArchive::close() [ziparchive.close]: Invalid or unitialized Zip object) - 这在任何地方都有记录吗?是否有 PHP 可以处理的实际x-mimetypes 列表?
编辑
回答以下问题:
- 我正在使用
$_FILES['fileatt']['type']检查mime 类型,但使用mime_content_type()会得到相同的结果。不同的 zip 文件似乎是以下任何一种:'application/zip'、'application/x-compressed'、'application/x-zip-compressed'、'application/x-compressed'、'multipart/x-zip'。我不明白为什么在检测到 MIME 类型为application/x-external-editor时出现错误。 - 我已经安装了 zip 扩展,并且在上传 zip 文件时,我会从这些文件中提取所有文件。我没想过要检查错误。
我还发现了另一件事我不太明白:当我将以下代码与 PHP 读取为 application/x-external-editor 的文件一起使用时:
if($zip->open($_FILES[fileatt]['tmp_name'])===TRUE)
{
echo "success";
} else {
echo "error";
}
打印“错误”,但检查文件类型为
$res = $zip->open($_FILES[fileatt]['tmp_name']);
if($res)
{
echo "success";
} else {
echo "error";
}
打印“成功”;在这段代码中,我假设布尔值有效地使用了==,而不是===,但这为什么会有所作为?
错误:
$res = $zip->open($_FILES[fileatt]['tmp_name']);
if($res===TRUE)
{
echo "success";
} else {
echo $res;
}
打印19 - 19 指的是哪个错误 (http://uk3.php.net/manual/en/ziparchive.open.php)?!
【问题讨论】:
-
回答您的第一个问题:不,它不安全,它不会告诉您有关该文件的任何信息。你如何检查这个,不同的 zip 文件不应该给你不同的结果,除非它们真的是 zip 文件。只要有正确的库,PHP 就可以处理任何事情。显示您如何检测 mime 类型的代码。
标签: php mime-types