Назад | Перейти на главную страницу

Почему в PHP должен быть установлен статус XHR перед эхом?

Возможно, этот вопрос относится к Переполнение стека или другой сайт, и в этом случае, пожалуйста, сообщите мне, а не просто голосуйте против; Я с радостью переставлю его.

В любом случае, я только изучаю самые основы управления сервером, и я играл со своим маленьким частным сервером MySQL на моем ноутбуке, когда я наткнулся на то, чего не ожидал. Когда я отправил запрос AJAX на страницу PHP с помощью jQuery $ .ajax () метод, я продолжал получать код ответа "200", хотя я вызвал функцию http_response_code(500); в моем PHP-коде. Я не мог понять, почему это происходит, пока не понял, что использую echo операторы для возврата данных на страницу Javascript и путем перемещения http_response_code(500); функция для выше все из echo операторов, он правильно установит код ответа HTTP.

Я понимаю, что это правильная функциональность, мне просто интересно, почему это так? Почему перед использованием эхо-функций необходимо установить код ответа HTTP? Что происходит в базовых протоколах? Я предполагаю, что это как-то связано с echo заставляют скрипт возвращать данные при его вызове, но тогда зачем скриптам вроде следующего:

echo "thing one";
echo "thing two";
http_response_code(500);
echo "thing three";

... все еще эхо "вещь три" нормально, но не менять код ответа?

У меня нет "проблемы" как таковой, я здесь, чтобы учиться! Спасибо!

Когда вы печатаете что-либо на теле, заголовки уже должны быть отправлены. Это если вы, например, echo() что-то или даже если перед <?php. Веб-сервер просто не может ничего вывести до того, как отправит заголовки, поскольку это форма HTTP-ответа, в результате чего любой вывод также отправляет заголовки.

Если вы попытаетесь использовать, например, header() который отправляет заголовок, вы можете получить Warning: Cannot modify header information - headers already sent by.

Помни этоheader() должен вызываться перед отправкой любого фактического вывода либо с помощью обычных тегов HTML, либо с помощью пустых строк в файле, либо из PHP. Считывание кода с помощьюinclude, илиrequire, функции или другая функция доступа к файлу, и перед ними выводятся пробелы или пустые строки.header()называется. Та же проблема существует при использовании одного файла PHP / HTML.

Так как http_response_code() не отправляет заголовки HTTP, а только подготавливает список заголовков для отправки позже, это не вызовет эту ошибку. При использовании headers_sent() в if условие может предотвратить эти ошибки с помощью header(), это также может быть полезно для устранения проблем при использовании http_response_code().