Niyə XHR statusu PHP-də əks-səda verilməzdən əvvəl qoyulmalıdır?

Bəlkə də bu sual Stack Overflow və ya bunun əvəzinə başqa bir sayta aiddir, bu halda xahiş edirəm mənə deyin və yalnız səs verməyin;

Hər halda, server idarəetməsinin əsaslarını öyrənirəm və öz kiçik, özəl MySQL serverimlə laptopumda oynayırdım, gözləmədiyim bir şeylə qarşılaşdım. JQuery $. Ajax () metodunu istifadə edərək bir PHP səhifəsinə AJAX sorğusu göndərdiyim zaman, funksiyanı http_response_code (500) çağırsam da, "200" cavab kodunu almağa davam edirdim. PHP kodumda . Verilənləri Javascript səhifəsinə qaytarmaq üçün echo ifadələrindən istifadə etdiyimi və http_response_code (500); funksiyasını hərəkətə gətirdiyimə qədər bunun niyə baş verdiyini anlaya bilmədim. yuxarıda echo ifadələrinin hamısı, HTTP cavab kodunu düzgün bir şəkildə qurardı.

Bunun düzgün işlək olduğunu başa düşürəm, sadəcə bunun niyə belə olduğunu merak edirəm? ] Echo funksiyalarını istifadə etməzdən əvvəl HTTP cavab kodu niyə təyin olunmalıdır? Əsas protokollarda nə baş verir? Mənim təxminim budur ki, bunun echo ilə əlaqəli bir əlaqəsi var, ssenarini çağırıldığı zaman məlumatları geri qaytarmağa məcbur etdi, amma sonra niyə aşağıdakı kimi skriptləri yerinə yetirir:

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

... yenə də “üç şey” i təkrarlayır yaxşı, amma cavab kodunu dəyişdirməyin?

Özümdə bir "problem" yaşamıram, sadəcə öyrənmək üçün burdayam! Təşəkkürlər!

1
задан 29 April 2020 в 06:01
1 ответ

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

Если вы попытаетесь использовать, например. header() , который отправляет заголовок, вы можете получить Предупреждение: нельзя изменить информацию заголовка — заголовки уже отправлены .

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

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

2
ответ дан 29 April 2020 в 05:01

Теги

Похожие вопросы