【问题标题】:Check mime type of file on upload with PHP. mime_content_type, fileINfo, linux file NOT available使用 PHP 检查上传文件的 mime 类型。 mime_content_type、fileINfo、linux 文件不可用
【发布时间】:2011-10-06 06:24:59
【问题描述】:

我整天都在网上搜索,无法找到解决这个问题的合理方法。

我正试图帮助客户将一个从另一台主机转移到 Godaddy 共享主机的网站重新组合在一起。

该站点是使用 CakePHP 构建的,其中一行使用了 mime_content_type,这在此服务器上不可用。 FILE 命令也不是,fileinfo 也不是。

我尝试了 upgrade.php 替换,但它可能失败了,因为它找不到 mime_magic。

由于 FILE 不可用,PEAR 解决方案失败。

有什么解决办法吗?

这里的唯一目标是确定文件是否为 PDF,而不是基于扩展名。

PHP 版本 5.2.17

非常感谢。

【问题讨论】:

    标签: php linux mime-types


    【解决方案1】:

    PDF 文件总是以%PDF- 开头,因此您可以读取前 4 个字节并检查它们是否相等。

    function is_pdf($fn) {
      $f = fopen($fn, 'rb');
      if ($f === false) return false;
      $res = fread($f, 5) == '%PDF-';
      fclose($f);
      return $res;
    }
    

    但是,将 MIME 魔术文件 download 命名为 finfo_open (php 5.3+) 或配置 mime_magic.magicfile 并使用 mime_content_type 可能更容易。

    【讨论】:

    • finfo_open 在 5.3 之前不可用。但阅读文件是个好主意。
    • @Jason 哎呀,忘了你使用的是旧的 php 版本。如果可能,更新到 5.3 - 它的新 features,更不用说新功能,早就该更新了。反正你也可以在php.ini中配置mime_magic.magicfile。用那个更新了答案。
    • 这已经足够了。我所做的只是将 mime-magic 上传到与 upgrade.php 包中的 mime.php 相同的目录,并更改 mime.php 中的 mime-magic 路径,瞧。谢谢!
    猜你喜欢
    • 2014-08-02
    • 2021-08-09
    • 2011-10-18
    • 2011-02-13
    • 2011-12-14
    • 1970-01-01
    相关资源
    最近更新 更多