我正在尝试检测断开的链接。以下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状态代码列表来微调状态检查:维基百科链接