获取上传文件的 mime 类型非常简单:
echo mime_content_type($fileatt['tmp_name']);
但是,我还想检查压缩文件中包含的文件的 mime 类型。解压缩我的文件后(循环通过 zip 中的文件以及i
当前文件在哪里),我尝试过:
$info = pathinfo($zip->getNameIndex($i));
echo mime_content_type($info['dirname'] . "\\" . $info['basename']);
这给出了错误:警告:mime_content_type() [function.mime-content-type]: File or path not found '.\foo.pdf' in C:\Users\<user>\<website>\validation.php
on line 56
我意识到dirname
压缩文件的 zip 文件是相对于 zip 文件的,而不是绝对路径,所以我尝试了:
$a = pathinfo($fileatt['tmp_name']);
$b = $a['dirname'] . "\\" . $info['basename'];
echo mime_content_type($b);
这给出了错误:Warning: mime_content_type() [function.mime-content-type]: File or path not found 'C:\xampp\tmp\foo.pdf' 在C:\Users\<user>\<website>\validation.php
第 56 行
任何人都可以对文件的路径有所了解吗?(我怀疑答案可能与从压缩文件中获取图像高度和宽度的评论相同,但有没有其他方法?)
更新
感谢 Baba,以下操作确实有效:
$fp = fopen('zip://C:\Users\<user>\<website>\test.zip#foo.jpg', "r");
(请注意,当我给出 zip 文件的完整路径时,我只能让它工作,而不是像通过表单上传文件时那样的 tmp 文件)。但是,尝试获取 mime-type: 会echo mime_content_type($fp);
产生错误:
Warning: mime_content_type() [function.mime-content-type]: stream does not support seeking in C:\Users\<user>\<website>\includes\validation.php on line 70
无论文件类型如何,都会发生这种情况(即在http://php.net/manual/en/ziparchive.getstream.php的唯一评论中所述的问题似乎对我没有影响)。
顺便说一句,这也是我尝试不同方法时遇到的相同错误:$fp = $zip->getStream('foo.jpg');
我知道在 SO 上还有其他几个“不支持流”的问题,但我无法弄清楚它们与我的问题有何关系,我希望既然有人特别建议了这种方法,可能会有一个很好的答案.. .
(ps 我没有使用这些finfo_*
功能,因为我的主机目前拒绝安装 PHP v5.3)。