Php 确定链接的内容
是否有任何PHP函数定义给定链接是视频还是图片,或者两者都不是 例如:Php 确定链接的内容,php,Php,是否有任何PHP函数定义给定链接是视频还是图片,或者两者都不是 例如: $link = www.example.com/342kddd23 $a = phpfunction($link); 如果$link是视频链接$a=1,如果$link是图片链接$a=2,如果$link未定义(可能是正常链接)$a=0 可能吗?如果是这样的话,有没有类似的现有函数?我不相信存在这样的库(我知道没有内置函数) 当然,您可以尝试开发自己的文件扩展名,但如果您计划不只是简单地检查是否存在已知的文件扩展名,如“.mp
$link = www.example.com/342kddd23
$a = phpfunction($link);
如果$link
是视频链接$a=1,
如果$link
是图片链接$a=2
,如果$link
未定义(可能是正常链接)$a=0
可能吗?如果是这样的话,有没有类似的现有函数?我不相信存在这样的库(我知道没有内置函数) 当然,您可以尝试开发自己的文件扩展名,但如果您计划不只是简单地检查是否存在已知的文件扩展名,如“.mp4”、““.png”等,那么您将无休止地追尾,因为您需要构建一个越来越大的匹配URL模式列表。(这也意味着给定的链接可能只返回单一类型的内容,而事实往往并非如此。) 假设您正在查找视频和图像文件本身(而不仅仅是包含视频的URL等),另一种(更准确的)方法是请求每个链接(可能在启用的情况下使用),查看返回的内容标题(特别是“
content Type
”),并从中获取信息
更新
根据@smassey的精彩评论,设置
CURLOPT_NOBODY
选项(再次通过)将发送HEAD
请求,从而确保您不会下载响应标题之外的任何内容。我认为不存在这样的库(我知道没有内置函数)
当然,您可以尝试开发自己的文件扩展名,但如果您计划不只是简单地检查是否存在已知的文件扩展名,如“.mp4”、““.png”等,那么您将无休止地追尾,因为您需要构建一个越来越大的匹配URL模式列表。(这也意味着给定的链接可能只返回单一类型的内容,而事实往往并非如此。)
假设您正在查找视频和图像文件本身(而不仅仅是包含视频的URL等),另一种(更准确的)方法是请求每个链接(可能在启用的情况下使用),查看返回的内容标题(特别是“content Type
”),并从中获取信息
更新
根据@smassey的精彩评论,设置
CURLOPT_NOBODY
选项(再次通过)将发送HEAD
请求,从而确保您不会实际下载响应标题之外的任何内容。它不存在,但您可以自行创建功能。它可以基于域或扩展或两者
例如,您可以列出最常见的视频和图片托管,并检查域是否对应
非常基本:
$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;
}
}
请注意,这是一个非常简单的示例,但您必须处理url等。它不存在,但您可以创建自己的函数。它可以基于域或扩展或两者 例如,您可以列出最常见的视频和图片托管,并检查域是否对应 非常基本:
$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;
}
}
小心点,这是一个非常简单的例子,但你必须处理url like或等。你的链接:$link=www.xxx.com/342kddd23是指向youtube视频和图片还是视频和图片的实际文件,因为如果它的文件你只需在文件扩展名上进行检测。你的链接:$link=www.xxx.com/342kddd23是指向youtube视频和图片还是实际文件视频和图片的文件,因为如果它的文件您可以在文件扩展名上进行检测。这种方法的问题是,它会认为(例如)是一个视频。是的,但有了这种解决方案,您将无休止地调整规则,但我想,如果你说的是指向可能包含视频的页面的URL,而不是指向图像/视频的直接链接,那么这是唯一可行的解决方案。这种方法的问题是,它会认为(例如)是视频。是的,但有了这种解决方案,你只会无休止地调整规则,但是,如果你说的是指向可能包含视频的页面的URL,而不是指向图像/视频的直接链接,那么我想这是唯一可行的解决方案。此外,不要发出普通的GET/POST请求,而是发送HTTP HEAD请求,以免在尝试下载mp4s时爆炸带宽/最大执行时间。)HTTP头请求仅用头而不是实际内容来响应。干杯——@smassey说的是明智的话。我已经更新了我的答案以包含此内容。除此之外,不要发出普通的GET/POST请求,而是发送HTTP HEAD请求,以避免在尝试下载mp4s时爆炸带宽/max_execution_time;)HTTP头请求仅用头而不是实际内容来响应。干杯——@smassey说的是明智的话。我已经更新了我的答案,以纳入这一点。