2010-12-21 5 views
4

Ich habe eine shutdown function, die prüft, ob eine Weiterleitung gerade ausgestellt wurde. Von headers_list() kann ich die Header gesendet bekommen und die Positionskopfzeile sehen. Meine Frage ist, wie würde ich herausfinden, was http_response_code in der header() Funktion verwendet wurde. Header-Liste hat keinen Antwortcode.PHP: Get http Statuscode, der Skript über die Shutdown-Funktion gerade gesendet

Beispielcode zum Spielen mit. Ich verwende keine Weiterleitungen im Beispielcode, sonst würde es eine Schleife bilden. Hauptsache ich möchte eine 301 vs jede andere Art von Redirect erkennen. Dies wäre drinnen (über drupal_goto unter Verwendung hook_exit); Der folgende Beispielcode zeigt das Problem. Ich habe keine Möglichkeit zu wissen, welche Statusnummer per header() an den Browser übergeben wurde.

<?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; 
} 
?> 

Dieser Code gibt diese

X-test: junk 1 
Array 
(
    [0] => X-Powered-By: PHP/5.2.10 
    [1] => X-test: junk 1 
) 

Antwort

3

Revision 302033 die Funktion http_response_code als Antwort auf genau die Art von issue you describe hinzugefügt, aber ich bin nicht sicher, wann wird es in einer Version enthalten sein. Es ist nicht in 5.3.4. Wenn Sie Zugriff haben, können Sie mit dieser Funktion eine gepatchte Version von PHP erstellen. Wenn nicht, können Sie anfordern, wer auf Ihrem Host Zugriff hat.

+0

Danke; nicht die Antwort, auf die ich gehofft hatte ... aber so ist es. Zumindest die neue Funktion ist in SVN von PHP. Code wäre für das Boost-Modul gewesen; jetzt hoffe ich, dass Drupal meinen Patch für drupal_goto akzeptiert. http://drupal.org/node/1003838 – mikeytown2