破我不知道是否有任何好的PHP腳本(庫),以檢查是否鏈接被打破?我有鏈接到MySQL表中的文檔,並可能只是檢查鏈接是否導致文檔,或者如果我重定向到其他網址。任何想法?我寧願用PHP來做。檢查鏈接在PHP
可能涉及: Check link works and if not visually identify it as broken
破我不知道是否有任何好的PHP腳本(庫),以檢查是否鏈接被打破?我有鏈接到MySQL表中的文檔,並可能只是檢查鏈接是否導致文檔,或者如果我重定向到其他網址。任何想法?我寧願用PHP來做。檢查鏈接在PHP
可能涉及: Check link works and if not visually identify it as broken
您可以檢查使用此功能斷開的鏈接:
function check_url($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
$headers = curl_getinfo($ch);
curl_close($ch);
return $headers['http_code'];
}
你需要有CURL
安裝了這個工作。現在,您可以檢查使用損壞的鏈接:
$check_url_status = check_url($url);
if ($check_url_status == '200')
echo "Link Works";
else
echo "Broken Link";
還要檢查該鏈接,HTTP狀態代碼:HTTP Status Codes
我想你也可以檢查301
和302
狀態代碼。
也是另一種方法是使用get_headers
功能。但是,這隻有當你的PHP版本大於5:
function check_url($url) {
$headers = @get_headers($url);
$headers = (is_array($headers)) ? implode("\n ", $headers) : $headers;
return (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
}
在這種情況下,只需檢查輸出:
if (check_url($url))
echo "Link Works";
else
echo "Broken Link";
希望這可以幫助您:)。
由於快速的解決方法檢查,您可以使用全局變量$http_response_header與file_get_contents()功能。
例如(來自PHP文檔中提取):
<?php
function get_contents() {
file_get_contents("http://example.com");
var_dump($http_response_header);
}
get_contents();
var_dump($http_response_header);
然後檢查在第一行中的狀態碼爲 「HTTP/1.1 200 OK」 或其他HTTP status codes。
試試這個:
$url = '[your_url]';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($curl);
if ($result === false) {
echo 'broken url';
} else {
$newUrl = curl_getinfo($curl, CURLINFO_EFFECTIVE_URL);
if ($newUrl !== $url) {
echo 'redirect to: ' . $newUrl;
}
}
curl_close($curl);
您可以在幾個方面做到這一點:
第一種方式 - 捲曲
function url_exists($url) {
$ch = @curl_init($url);
@curl_setopt($ch, CURLOPT_HEADER, TRUE);
@curl_setopt($ch, CURLOPT_NOBODY, TRUE);
@curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
@curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$status = array();
preg_match('/HTTP\/.* ([0-9]+) .*/', @curl_exec($ch) , $status);
return ($status[1] == 200);
}
方式二 - 如果你沒有捲曲安裝 - 獲得頭
function url_exists($url) {
$h = get_headers($url);
$status = array();
preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status);
return ($status[1] == 200);
}
氏RD方式 - 的fopen
function url_exists($url){
$open = @fopen($url,'r');
if($handle !== false){
return true;
}else{
return false;
}
}
哪種方法最快,最少資源渴? – danyo
第三種方法中的$ handle是什麼? @Orel Biton – NomanJaved
相關主題看起來很相關。 – Kermit
檢查響應頭使用curl和發佈您的代碼與特定問題 – Ejaz
是此鏈接的其他網站上自己的網站或者內容的一些內容? – Touch