【发布时间】:2012-05-08 22:38:43
【问题描述】:
获取上传文件的 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是相对于压缩文件的,而不是绝对路径,所以我尝试了:
$a = pathinfo($fileatt['tmp_name']);
$b = $a['dirname'] . "\\" . $info['basename'];
echo mime_content_type($b);
给出错误:警告:mime_content_type() [function.mime-content-type]: File or path not found 'C:\xampp\tmp\foo.pdf' in C:\Users\<user>\<website>\validation.php on line 56
任何人都可以对文件的路径有所了解吗? (我怀疑答案可能和getting image height and width from zipped files上的评论一样,但是有没有替代方法?)
更新
感谢 Baba,以下方法确实有效:
$fp = fopen('zip://C:\Users\<user>\<website>\test.zip#foo.jpg', "r");
(n.b. 只有当我给出 zip 文件的完整路径时,我才能让它工作,而不是像通过表单上传文件时那样的 tmp 文件)。但是,尝试获取 mime 类型: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 上还有其他几个“不支持流”的问题,但我无法弄清楚它们与我的问题有何关系,我希望由于这种方法已被特别建议,有人可能会有一个好的回答...
(p.s. 我没有使用 finfo_* 函数,因为我的主机目前拒绝安装 PHP v5.3)。
【问题讨论】:
-
你用
Zip extension's stream wrapper测试过吗? -
您只能在物理文件上使用
mime_content_type(),这意味着,您必须将文件从 zip 解压缩到某个目录中,然后循环遍历它们,而不仅仅是遍历 zip 中的文件列表.
标签: php