在PHP中检查URL是否为视频文件的最佳方法是什么?

3

我希望找到一种方法,几乎可以确定一个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;
    }
 }

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

http://php.net/manual/en/function.mime-content-type.php - I wrestled a bear once.
1
不是所有的URL都能正确报告MIME类型。你最好获取文件的前几KB并通过finfo运行它,在你的端上进行MIME确定。 - Marc B
get_http_response_code() 看起来非常混乱。我不会依赖于子字符串是有效的http状态码。在返回值上使用 intval() 将在函数出现故障的所有情况下给您0。而且由于0 < 400 ... BOOM - maxhb
2个回答

0
你可以尝试这段代码,
<?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吗?对于大型视频文件可能不是想要的。 - maxhb
感谢您的建议,但是对于 PHP 的 stream_get_meta_data 函数有何看法呢?也许我可以使用它来获取我所需要的元数据并检查文件类型... - Polykrom

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接