10

嘿,检查远程文件 mime 类型的最快方法是什么...我正在考虑从第一个字节中读取一些,甚至更多...我花了几个小时思考如何使事情变得正确,但我没有任何想法...我必须检查远程文件是否为 mp3,但它必须是 fastcheck...

4

3 回答 3

16

PHP curl_getinfo()

<?php
    # the request
    $ch = curl_init('http://www.google.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);

    # get the content type
    echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

    # output
    // text/html; charset=ISO-8859-1
?>

输出

HTTP/1.1 301 Moved Permanently
Location: http://www.google.com/
Content-Type: text/html; charset=UTF-8
Date: Fri, 09 Apr 2010 20:35:12 GMT
Expires: Sun, 09 May 2010 20:35:12 GMT
Cache-Control: public, max-age=2592000
Server: gws
Content-Length: 219

为了实际确认文件是否包含实际的 MP3 数据或任何其他媒体格式,我使用getID3()

于 2012-09-29T22:07:56.120 回答
6

发出 HEAD 请求。查看服务器声称它是什么 Content-Type。

这个 stackoverflow 问题讨论了通过 PHP 访问 HTTP 标头。

于 2012-09-29T22:04:00.327 回答
1

仅检查Content-Type您信任的远程服务器时:

  • 远程服务器可能是恶意的并故意提供错误的 Content-Type
  • Content-Type 是使用文件扩展名生成的,因此恶意用户可以使用授权扩展名存储错误的文件类型以绕过您的安全性

更安全的方法是将文件下载到临时文件夹中,然后mime_content_type使用magic.mime.

此技术仅使用幻数,仅读取文件的第一个字节(标题),可以绕过。

最安全的方法是使用一个库来验证给定文件对于它应该是的所需类型是否有效。

于 2019-11-02T00:40:30.797 回答