PHPでHTTPのHEADコマンドを使用する最も簡単な方法は何ですか?
質問
私は、ヘッダーを取得するために、PHPでのサーバーへのハイパーテキスト転送プロトコルのHEADコマンドを送信するために好きではなく、コンテンツやURLです。私は効率的な方法でこれをどのように行うのですか?
おそらく最も一般的なユースケースは死んWebリンクをチェックすることです。このために私は、HTTP要求ではなく、ページコンテンツの応答コードが必要になります。
PHPでのWebページを取得することはfile_get_contents("http://...")
を使用して簡単に行うが、それはどのような/全体のページコンテンツ/画像をダウンロードすると、リンクをチェックする目的のために、これは本当に非効率的であることができます。
解決
あなたはHEAD
にリクエストメソッドを設定するには、HTTPコンテキストオプションを使用することができますカールする代替案として。そして、これらのオプションを使用してHTTP(ラッパー)のストリームを開き、メタデータをフェッチます。
$context = stream_context_create(array('http' =>array('method'=>'HEAD')));
$fd = fopen('http://php.net', 'rb', false, $context);
var_dump(stream_get_meta_data($fd));
fclose($fd);
も参照してください。
http://docs.php.net/stream_get_meta_data の
http://docs.php.net/context.httpする
他のヒント
あなたは cURLのにしてきれいにこれを行うことができます
<?php
// create a new cURL resource
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
// This changes the request method to HEAD
curl_setopt($ch, CURLOPT_NOBODY, true);
// grab URL and pass it to the browser
curl_exec($ch);
// Edit: Fetch the HTTP-code (cred: @GZipp)
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
// close cURL resource, and free up system resources
curl_close($ch);
カールよりもさらに簡単に - ちょうどあなたが指定した任意のURLのためのすべてのヘッダ情報の配列を返すPHPget_headers()
functionを使用しています。そして、リモートファイルの存在をチェックするための別の本当の簡単な方法は、(あなたがこのためにallow_url_fopenを有効にする必要があります)読み取りモードでURLを開こうusefopen()
andすることです。
ただ、それはすべてそこにあります、これらの機能のためのPHPマニュアルをチェックしてください。
に思えるます: