2017-01-23 15 views
0

curlを使用してドメイン名の配列をチェックし、httpコードを返すスクリプトを作成しています。リダイレクトURLのhttp応答コードをPHP/cURLで確認してください

$urls = array('http://www.example.com', 'http://www.example2.com', 'http://www.example3.com'); 

$msg = " 
<p><strong>URL Error Check</strong></p> 
"; 

//Set code colours 
$code200 = '<span style="color: green;"> OK - '; 
$code0 = '<span style="color: red;"> Undefined Error - '; 
$code404 = '<span style="color: red;"> File Not Found - '; 

foreach($urls as $value){ 
    $ch = curl_init($value); 

     curl_setopt($ch, CURLOPT_HEADER, true); // we want headers 
     curl_setopt($ch, CURLOPT_NOBODY, true); // we don't need body 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
     curl_setopt($ch, CURLOPT_TIMEOUT,10); 
     curl_setopt($ch, CURLOPT_CERTINFO,true); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($ch, CURLOPT_MAXREDIRS, 5); 

    $output = curl_exec($ch); 
    $httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 

    if($httpcode==301 || $httpcode==302){ 
     $redirect = curl_getinfo($ch, CURLINFO_REDIRECT_URL); 
     $httpcode .='<br> Redirects to: <span style="color: orange;">'.$redirect; 
    } 

    curl_close($ch); 

    $msg .= $value.": <strong>".${code.$httpcode}.$httpcode."</strong></span><br><br>"; 
} 

echo $msg; 

コードが301または302の場合、リダイレクト後に解決URLが返されます。私は最終的なURLをチェックして、httpコードも返すようにしたいと思います。

どうすればいいですか?

答えて

0

あなたはカール・リクエストのために、このオプションを使用することができます。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 

trueに設定され、このオプションを使用すると、リダイレクトが発生したときに、あなたの要求は停止しません。

+0

私は既にカール要求にこれを持っています。現在、リダイレクトに続く前に最初のURLのコードを返します。 –

+0

@JamieMoffat本当ですか?フォローしている場所では、httpコードは最終的なhttpコードでなければならず、urlもリダイレクトからの最終的なURLになります。 – drew010

+0

はい。現時点では、 '$ urls = array( 'http://example.com');上のコードは、「http://example.com:301」を返し、「https://example.com」にリダイレクトします。 2番目のURLは、最初のURLのhttps://です –

関連する問題