PHP: Получить код состояния http, который собственный скрипт только что отправил через функцию выключения - PullRequest
4 голосов
/ 21 декабря 2010

У меня есть функция отключения , которая проверяет, было ли только что выполнено перенаправление.Из headers_list () я могу получить отправленные заголовки и посмотреть заголовок местоположения.У меня вопрос, как бы я выяснил, какой http_response_code использовался в функции header () .Список заголовков не имеет кода ответа.

Пример кода, с которым можно поиграть.Я не использую перенаправления в примере кода, в противном случае это будет цикл.Главное, я хотел бы обнаружить 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
)

1 Ответ

3 голосов
/ 21 декабря 2010

Редакция 302033 добавила функцию http_response_code в ответ только на проблему типа , которую вы описываете , но я не уверен, когда она будет включены в выпуск. Это не в 5.3.4. Если у вас есть доступ, вы можете создать исправленную версию PHP с этой функцией. Если нет, вы можете запросить его у любого, кто имеет доступ к вашему хосту.

...