1

Web サイトのキャッシュを準備する PHP スクリプトがあります。

Nginx フロントエンドをバイパスして、Apache バックエンドからヘッダーを取得しようとしています。

次の例は(コマンドライン経由で)機能します:

curl -I -H "Host: example.com" 127.0.0.1

ただし、PHPで同じことをしようとすると、そうではありません。

$headers = array("Host: example.com");
$url = "127.0.0.1";
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt ($ch, CURLOPT_HEADER, true);
curl_setopt ($ch, CURLOPT_NOBODY, true);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
$ret = curl_exec ($ch);
curl_close ($ch);

echo "$ret";

これは常に、「ホスト」httpヘッダーにリストされているWebサイトではなく、Apache virtualhostファイルにリストされている最初のWebサイトを返します。

コマンドライン経由では問題なく動作するのに、php スクリプトでは動作しない理由がわかりませんか?

4

2 に答える 2

0

それが可能かどうかはまったくわかりませんが、初期化でURLを渡すことを試みます:

$ch = curl_init($url);

そして、ではありませんcurl_setopt。テストするための単なる提案であり、これが役立つという保証はありません。もっと長いコメントです。

また、詳細モードを有効にして、curl がリクエスト ヘッダーに対して具体的に何を送信するかを確認することもできます。host および system で curl を介してサイトに接続します。これは、カーテンの後ろで何が起こっているかを示しているはずです。これは、ネットワーク トラフィックをまだスニッフィングしていない場合に非常に役立ちます。

于 2013-01-06T22:50:35.540 に答える
-1

ここに答えがあると思います。

"代わりにこれを行います:

$host = "www.example.com"; 
$url = "http://$host/"; 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_URL, $url); 

"

于 2013-01-06T22:52:12.050 に答える