1

現在、以下の機能を使用しています

function urlExist($url)
{
                $handle   = curl_init($url);
                if (false === $handle)
                {
                        return false;
                }
                curl_setopt($handle, CURLOPT_HEADER, false);
                curl_setopt($handle, CURLOPT_FAILONERROR, true);  // this works
                curl_setopt($handle, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); // request as if Firefox
                curl_setopt($handle, CURLOPT_NOBODY, true);
                curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
                $connectable = curl_exec($handle);
                ##print $connectable;
                curl_close($handle);
                return $connectable;
}

単純なURLの場合は正常に機能しますが、別のドメインにリダイレクトするURLの場合は機能しません

4

2 に答える 2

6

設定する必要がありますFOLLOWLOCATION

curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);

ただし、ここでGETリクエストを発行しても意味がありません。ヘッダーのみが転送されるため、単純なHEADは軽量です。NOBODYこれを行うには、 trueに設定します。

curl_setopt($handle, CURLOPT_NOBODY, true);
于 2012-04-11T09:52:37.047 に答える
0

同じ関数を使用していますが、新しいドメインへのドメインtrieuvieclam.comリダイレクトで問題が発生していません。CHROMEブラウザを使用しています

function url_exists($url) {
    $handle   = curl_init($url);
    if (false === $handle)
    {
            return false;
    }

    curl_setopt($handle, CURLOPT_HEADER, false);
    curl_setopt($handle, CURLOPT_FAILONERROR, true);  // this works
    curl_setopt($handle, CURLOPT_HTTPHEADER, Array("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.15) Gecko/20080623 Firefox/2.0.0.15") ); // request as if Firefox
    curl_setopt($handle, CURLOPT_NOBODY, true);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
    curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($handle, CURLOPT_CONNECTTIMEOUT, 3);
    $connectable = curl_exec($handle);
    ##print $connectable;
    curl_close($handle);
    if($connectable){
        return true;
    }
    return false;
}

この行を:curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);に変更しようとしましfalseたが、結果は同じです(既存のドメイン)。

if (false === $handle)
        {
                return false;
        }

この条件は、URLでなくても、どの文字列でも満たされることはありません。サーバーでcurlがサポートされていない場合にのみ一致する可能性があります。

于 2016-10-11T09:12:29.240 に答える