检查php中的链接是否已损坏

Ste*_*enW 16 php

我想知道是否有任何好的PHP脚本(库)来检查链接是否被破坏?我有链接到mysql表中的文档,可能只是检查链接是否通向文档,或者我是否被重定向到anther url.任何的想法?我更喜欢用PHP来做.

可能与以下内容有关: 检查链接是否正常工作,如果不能直观地将其识别为损坏

Sab*_*ari 28

您可以使用此功能检查断开的链接:

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'];
}
Run Code Online (Sandbox Code Playgroud)

你需要CURL安装才能工作.现在您可以使用以下方法检查损坏的链接

$check_url_status = check_url($url);
if ($check_url_status == '200')
   echo "Link Works";
else
   echo "Broken Link";
Run Code Online (Sandbox Code Playgroud)

另请查看此链接以获取HTTP状态代码:HTTP状态代码

我想你也可以检查301302状态代码.

另一种方法是使用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);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,只需检查输出:

if (check_url($url))
   echo "Link Works";
else
   echo "Broken Link";
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助你:).


Ore*_*ton 5

您可以通过以下几种方式执行此操作:

第一种方式-卷曲

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);
}
Run Code Online (Sandbox Code Playgroud)

第二种方法-如果您没有安装curl-获取标头

function url_exists($url) {
    $h = get_headers($url);
    $status = array();
    preg_match('/HTTP\/.* ([0-9]+) .*/', $h[0] , $status);
    return ($status[1] == 200);
}
Run Code Online (Sandbox Code Playgroud)

第三种方式-FOPEN

function url_exists($url){
    $open = @fopen($url,'r');
    if($handle !== false){
       return true;
    }else{
       return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一和第二解决方案

  • 哪种方法渴求最快且资源更少? (2认同)