【问题标题】:Best way to check if URL is a video file in PHP?检查URL是否是PHP中的视频文件的最佳方法?
【发布时间】:2016-02-29 18:15:25
【问题描述】:

我正在尝试找到一种方法来(几乎)确定 URL 是真实的视频文件。

我当然检查了 get_headers 以检查 URL 是否存在以及标题内容类型:

function get_http_response_code($theURL)
{
    $headers = get_headers($theURL);
    return substr($headers[0], 9, 3);
}


function isURLExists($url)
{
    if(intval(get_http_response_code($url)) < 400)
    {
        return true;
    }

    return false;
 }

function isFileVideo($url)
{
    $headers = get_headers( $url );

    $video_exist = implode(',',$headers);

    if (strpos($video_exist, 'video') !== false) 
    {
        return true;
    }
    else
    {
        return false;
    }
 }

也许我会回答自己,但也许还有其他更强大的解决方案(主要针对视频类型)。 不知道是否可以,但我可以先下载文件元数据并返回与此测试相关的文件吗?

非常感谢!

【问题讨论】:

  • 并非所有网址都正确报告 mime 类型。你最好抓住文件的前几 KB 并通过 finfo 运行它,然后在你的最后进行 mime 确定。
  • get_http_response_code() 看起来很脏。我不会依赖子字符串作为有效的 http 状态代码。在函数发生严重破坏的所有情况下,在返回值上使用 `intval()` 将为您提供 0。而且由于 0

标签: php file video http-headers


【解决方案1】:

当然您不能确定,但​​最佳做法是检查文件的第一个字节并根据此信息识别 MIME 类型。

在这个问答中可以找到一个例子:https://stackoverflow.com/a/8225754/2797243

【讨论】:

    【解决方案2】:

    你可以试试这段代码,

    <?php
    function getUrlMimeType($url) {
    $buffer = file_get_contents($url);
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    return $finfo->buffer($buffer);
    }
    ?>
    

    您需要在您的 PHP.ini 上启用扩展

    php_fileinfo.dll

    如果你想下载部分文件使用,

    $filename = $url;
    $portion=8192; // if you want upto 8192 byte to read
    $handle = fopen($filename, "rb");
    $contents = fread($handle, $portion);
    fclose($handle);
    

    如果您想从内部文件使用中获取$url 的一部分,

    $filename = $url;
    $from=10000; // if you want to read file from 1000 byte
    $to=9999; //if you want to read up to 999 9byte
    $handle = fopen($filename, "rb");
    $skip= fread($handle, $from);
    $contents = fread($handle, $to);
    fclose($handle);
    

    然后您可以检查文件的 MIME 类型。 谢谢

    【讨论】:

    • 那个函数会下载整个文件$url?对于大型视频文件,可能不需要。
    • 感谢您的建议,但是 php stream_get_meta_data 函数呢?也许我可以用它来只获取我需要的元数据并检查文件类型......
    猜你喜欢
    • 2011-05-25
    • 2011-01-04
    • 2019-10-03
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多