PHP获取远程文件mime-type

时间:2012-09-29 22:01:22

标签: php mime-types

嘿,检查远程文件mime-type的最快方法是什么...我想从第一个字节读取一些,也许更多...我花了几个小时思考如何使事情正确,但没有在我的脑海里......我必须检查如果远程文件是mp3,但必须快速检查...

3 个答案:

答案 0 :(得分:12)

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()

答案 1 :(得分:5)

发出HEAD请求。查看服务器声称的内容类型。

This stackoverflow question讨论通过PHP访问HTTP标头。

答案 2 :(得分:0)

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

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

一种更安全的方法是将文件下载到一个临时文件夹中,然后使用magic.mime使用mime_content_type在本地检查MIME类型。

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

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