使用PHP检测所有链接(包括那些没有进入文件的链接)


Using PHP to Detect All Links (Including those that don't go to a file)

我正在尝试检测断开的链接。以下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
}

但问题是这样的链接:

torrentfrank.com/unlocking-the-rate-bay-the-hard-way-is-fun-for-geks-120506

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

谢谢!

Mordak

您可以尝试使用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状态代码列表来微调状态检查:维基百科链接