shutdown functionはリダイレクトが発行されたかどうかを確認しています。 headers_list()から送信されたヘッダーを取得して、位置ヘッダーを確認できます。私の質問は、header()関数でhttp_response_codeがどのように使用されたかをどのように把握するかです。ヘッダーリストに応答コードがありません。PHP:シャットダウン機能を使用してスクリプトを送信したばかりのHTTPステータスコードを取得する
回避するコード例。私はリダイレクトを例のコードでは使用しません。それ以外の場合はループします。主なことは、301と他の種類のリダイレクトを検出することです。これはdrupalの中にあります(drupal_gotoを使用して、hook_exitを使用)。下のサンプルコードはこの問題を示しています。私は、どのステータス番号がheader()経由でブラウザに渡されたのかわからない。
<?php
register_shutdown_function('test');
if (mt_rand(0, 1)) {
header('X-test: junk 1', TRUE, 201);
}
else {
header('X-test: junk 0', TRUE, 202);
}
exit();
function test() {
if ($location = test_headers_contain('X-test: ')) {
// Would like to check the status code that was sent out
echo $location . '<br>';
$list = headers_list();
$txt = str_replace(' ', ' ', nl2br(htmlentities(print_r($list, TRUE))));
echo $txt;
}
}
function test_headers_contain($text) {
if (function_exists('headers_list')) {
$list = headers_list();
if (empty($list)) {
return FALSE;
}
foreach ($list as $header) {
$info = stristr($header, $text);
if ($info !== FALSE) {
return $info;
}
}
}
return FALSE;
}
?>
このコードの出力は、この
X-test: junk 1
Array
(
[0] => X-Powered-By: PHP/5.2.10
[1] => X-test: junk 1
)
ありがとうございます。私が望んでいた答えではありません...しかし、それはどうしています。少なくとも新しい関数はPHPのSVNにあります。ブーストモジュール用のコードだったでしょう。 drupalがdrupal_gotoのパッチを受け入れることを願っています。 http://drupal.org/node/1003838 – mikeytown2