1

是否有任何 PHP 函数可以定义给定链接是视频、图片还是两者都不是。

例如:

$link = www.example.com/342kddd23
$a = phpfunction($link);

如果$link是视频链接;$a = 1,if$link是图片链接$a = 2,if$link未定义(可能是普通链接)$a = 0

那可能吗?如果是这样,是否有任何现有的功能?

4

2 回答 2

5

它不存在,但您可以制作自己的功能。它可以基于域或扩展名或两者...

例如,您可以列出最常见的视频和图片托管并检查域是否对应。

非常基础:

$videos_services =  array('www.youtube.com', 'www.vimeo.com');
$pics_services    =  array('www.flickr.com', 'www.imageshack.us');

function urlType($myUrl)
{
   $url  = parse_url($myUrl);
   $host = $url['host'];

   if(in_array($host, $videos_services))
   {
       return 1;
   }
   elseif(in_array($host, $pics_services))
   {
       return 2;
   }
   else
   {
       return 0;
   }
}

小心,这是一个非常简单的示例,但您必须处理诸如http://youtube.comhttp://www.youtu.be等网址。

于 2013-08-09T14:09:14.843 回答
2

我不相信这样的库存在(没有我知道的内置函数)。

您当然可以尝试开发自己的,但如果您打算超越简单地检查是否存在已知的文件扩展名,例如“.mp4”、“.png”等,那么您将无休止地追逐自己的尾巴。事实上,您需要构建一个越来越大的匹配 URL 模式列表。(这也意味着给定的链接可能只返回一种类型的内容,但通常情况并非如此。)

假设您正在寻找视频和图像文件本身(而不仅仅是包含视频等的 URL),另一种(更准确)的方法是请求每个链接(可能使用启用CURLOPT_HEADER的cURL),查看哪些内容标题被返回(特别是“ ”)并从那里拿东西。Content-Type

更新

作为基于@smassey 出色评论的后续行动,设置CURLOPT_NOBODY选项(再次通过curl_setopt)将发送HEAD请求,从而确保您实际上不会下载响应标头本身之外的任何内容。

于 2013-08-09T14:01:49.827 回答