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コードも返すようにしたいと思います。
どうすればいいですか?
私は既にカール要求にこれを持っています。現在、リダイレクトに続く前に最初のURLのコードを返します。 –
@JamieMoffat本当ですか?フォローしている場所では、httpコードは最終的なhttpコードでなければならず、urlもリダイレクトからの最終的なURLになります。 – drew010
はい。現時点では、 '$ urls = array( 'http://example.com');上のコードは、「http://example.com:301」を返し、「https://example.com」にリダイレクトします。 2番目のURLは、最初のURLのhttps://です –