2010-12-21 6 views
4

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(' ', '&nbsp;&nbsp;&nbsp;&nbsp;', 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 
) 

答えて

3

Revision 302033issue you describeのちょうどソートに応じて機能http_response_codeを追加しましたが、それはリリースに含まれるとき、私は確かではありませんよ。 5.3.4にはありません。アクセス権がある場合は、この関数を追加してパッチを適用したPHPをビルドすることができます。そうでない場合は、ホスト上の誰でもアクセス権を持っていることを要求できます。

+0

ありがとうございます。私が望んでいた答えではありません...しかし、それはどうしています。少なくとも新しい関数はPHPのSVNにあります。ブーストモジュール用のコードだったでしょう。 drupalがdrupal_gotoのパッチを受け入れることを願っています。 http://drupal.org/node/1003838 – mikeytown2

関連する問題