2

PHPスクリプトで使用するサーバーのHTTP応答(私の場合はApache2)の最初の行を取得するにはどうすればよいですか?例えば:

HTTP/1.1 200 OK
HTTP/1.1 404 Not Found
Etc.

または、サーバーがクライアントに送信するHTTP応答コードだけを取得することをお勧めします。

驚いたことに、$_SERVERにはありません。http_response_code()は、PHPによって最初に設定された場合にのみ応答コードを取得するようです。apache_response_headers()にはそれがないようです。get_headers()は、追加のステップ/接続が必要になるようです(間違っている場合は修正してください)。

ErrorDocument 403 /index.phphttpd.confで設定した場合、 $_SERVER["REDIRECT_STATUS"]PHPから応答コードを取得するために使用できますが、別の方法はありますか?

編集:

$_SERVER明確にするために、応答の最初の行または応答コードを除いて、データのほぼすべてのビットを返すのは奇妙だと思います。多分それはHTTPプロトコル/サーバーテクノロジー/PHP間の一般的な制限ですか?たぶん、PHPスクリプトでこの情報にアクセスしようとしてはいけませんか?

4

2 に答える 2

1

更新:自分のリクエストをプロキシしない限り、それは不可能です。リクエストを公開URLに送信してから、それらを内部バリアントにリダイレクトすると、プロセスのヘッダーが表示されます。しかし、それは簡単な偉業ではなく、パフォーマンスへの負担もあります。または、Http Server拡張機能を作成して、それがどこに行くのかを確認することもできます:)

例:

  • /page.htmlにリクエストが届きます
  • ?proxy = trueを追加し、/ page.html?proxy=trueに転送します
  • 元のリクエストを内部ハンドラーに転送する新しいURLを内部的にロードしようとします
  • すべての$_GET['proxy']==='true'リクエストがローカルIPから送信されているかどうか内部処理をチェックインします
  • プロキシ===trueがある場合は、これを通常の方法で処理します
  • /page.htmlは/page.html?proxy=trueからデータを取得します
  • ログヘッダー
  • データを元のクライアントに転送します
  • (間違って行われた場合、非常に簡単ではなく、パフォーマンスに負担がかかります)

回答の最初の試み

http://php.net/manual/en/function.headers-list.php-これでしょうか?

しかし、これは送信しようとしているヘッダーに対しては機能します...

register_shutdown_function(function(){
    // Headers are really sent here, do some comparison
    var_dump(headers_list());
});

欠落しているすべてのファイルをindex.phpに転送する.htaccessバリアント。

RewriteEngine on
#If handler file is missing, pull index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php [L,NC]

これを試して。

于 2012-10-20T16:11:55.213 に答える
0

リモートホストまたはローカルマシンの応答コードを要求していますか?最初のケースでは、ヘッダーオプションが設定されたCURLリクエストを使用してマシンに「ping」を実行し、応答ヘッダーのさまざまな設定を取得できます。

于 2012-10-20T16:09:59.530 に答える