14

Hypertext Transfer Protocol の HEAD コマンドを PHP のサーバーに送信して、ヘッダーを取得しますが、コンテンツや URL は取得したくありません。効率的な方法でこれを行うにはどうすればよいですか?

おそらく最も一般的な使用例は、デッド Web リンクをチェックすることです。このために必要なのは、ページ コンテンツではなく、HTTP 要求の応答コードだけです。PHP で Web ページを取得することは、 を使用して簡単に実行できますがfile_get_contents("http://...")、リンクをチェックする目的では、ページ全体のコンテンツ/画像/その他をダウンロードするため、これは非常に非効率的です。

4

5 に答える 5

23

これは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);
于 2009-10-09T18:46:30.243 に答える
21

curl の代わりに、http コンテキスト オプションを使用してリクエスト メソッドを に設定できますHEAD。次に、これらのオプションを使用して (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

于 2009-10-09T20:48:26.987 に答える
5

curl よりも簡単get_headers()です。指定した URL のすべてのヘッダー情報の配列を返す PHP 関数を使用するだけです。リモート ファイルの存在を確認するもう 1 つの簡単な方法はfopen()、URL を読み取りモードで開いてみることです (これには allow_url_fopen を有効にする必要があります)。

これらの関数については、PHP のマニュアルを参照してください。すべて記載されています。

于 2009-10-10T07:04:31.783 に答える
2

それはナシがそれを持っているようです:

http://pear.php.net/manual/en/package.http.http.head.php

于 2009-10-09T18:47:52.633 に答える