1

我正在尝试检测断开的链接。以下 PHP 访问 MySQL 表似乎对几乎所有东西都很好(但由于 fopen 很慢):

function fileExists($path){    
    return (@fopen($path,"r")==true); 
}
$status="";
$result = mysql_query(" SELECT id, title, link from table ");  
while ($row = mysql_fetch_array($result)) {
    $id=$row{'id'};
    $title=$row{'title'};
    $link1=$row{'link1'};
    etc.   
    if ($link){
        if (fileExists($link)!=TRUE) {
            $status='BROKEN_LINK';  
        }
    }
    //Here do something if the status gets set to broken
}

但问题是这样的链接:

torrentfreak.com/unblocking-the-pirate-bay-the-hard-way-is-fun-for-geeks-120506

在这里,它不是去文件,而是去某个地方并获取内容。那么,当这些情况不在您自己的域中时,正确检测这些情况的最佳方法是什么?

谢谢!

莫达克

4

1 回答 1

1

您可以尝试使用 cURL 方法:

function fileExists(&$pageScrape, $path){ // Adding parameter of cURL resource as a pointer.
    curl_setopt($pageScrape, CURLOPT_URL, $path); // Set URL path.
    curl_setopt($pageScrape, CURLOPT_RETURNTRANSFER, true); // Don't output the scraped page directly.
    curl_exec($pageScrape); // Execute cURL call.
    $status = curl_getinfo($pageScrape, CURLINFO_HTTP_CODE); // Get the HTTP status code of the page, load into variable $status.
    if ($status >= 200 && $status <= 299) { // Checking for the page success.
        return true; 
    } else {
        return false;
    }
}

$pageScrape = curl_init();

$status="";
$result = mysql_query(" SELECT id, title, link from table ");  
while ($row = mysql_fetch_array($result)) {
    $id=$row{'id'};
    $title=$row{'title'};
    $link1=$row{'link1'};
    etc.   
    if ($link){
        if (fileExists($pageScrape, $link)!=TRUE) {
            $status='BROKEN_LINK';  
        }
    }
    //Here do something if the status gets set to broken
}
curl_close($pageScrape);

您可以通过查看 HTTP 状态代码列表来微调状态检查:Wikipedia link

于 2012-07-08T20:42:09.660 回答