【问题标题】:Check if download link is dead in php?检查下载链接是否在php中失效?
【发布时间】:2012-12-09 00:41:49
【问题描述】:

如果我得到页面的标题,我可以判断下载链接是活动的还是失效的。

例如:“Free online storage”是死链接的标题,“[文件名]”是活动链接的标题(mediafire)。但是我的页面响应时间太长,有没有其他方法可以检查下载链接是活跃还是失效?

这就是我所做的:

<?php

function getTitle($Url){
$str = file_get_contents($Url);
if(strlen($str)>0){
    preg_match("/\<title\>(.*)\<\/title\>/",$str,$title);
    return $title[1];
}
}

?>

【问题讨论】:

  • 请展示你做了什么。
  • 抱歉,我编辑了我的问题

标签: php


【解决方案1】:

不要执行GET请求,它会下载整个页面/文件,而是HEAD请求,它只获取HTTP头,并检查状态是否为200,并且内容类型不是text/html

【讨论】:

  • 仅仅返回 200 响应是不够的;许多有效链接在原所有者未能续订时,在变为色情/赌博门户后仍会继续返回“200”。域名抢注者通常会确保其域中的每个 URL 返回 200。
  • 嗯,实际上解决方案是特定于域的。我认为不存在通用解决方案,因为计算机无法知道什么是有效页面,什么不是 Internet 中的所有情况,但对于特定站点,HEAD 请求可能会很好地服务。
  • 能详细点吗?我应该使用哪个代码仅请求标头,以及如何从中获取标题?非常感谢。
【解决方案2】:

这样的……

function url_validate($link)
{
    #[url]http://www.example.com/determining-if-a-url-exists-with-curl/[/url]
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $link);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_NOBODY, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); //follow up to 10 redirections - avoids loops
    $data = curl_exec($ch);
    curl_close($ch);
    preg_match_all("/HTTP\/1\.[1|0]\s(\d{3})/",$data,$matches);

    $code = end($matches[1]);

    if(!$data) 
    {
        return(false);
    } 
    else 
    {
        if($code==200) 
        {
            return(true);
        } 
        elseif($code==404) 
        {
            return(false);
        }
    }
}

您可以安全地使用任何 cURL 库函数。这是合法的,因此不会被视为黑客攻击。唯一的要求是您的网络托管公司安装了 cURL 扩展,这很有可能。

【讨论】:

  • curl_getinfo($ch, CURLINFO_HTTP_CODE); 是获取 HTTP 代码的更好方法
【解决方案3】:

cURL 应该可以完成这项工作。您可以根据需要检查返回的标题和文本内容。

【讨论】:

    猜你喜欢
    • 2020-08-04
    • 1970-01-01
    • 2013-03-24
    • 2015-10-14
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    相关资源
    最近更新 更多