Intereting Posts
Каков наилучший способ скрыть файл на сервере? Интеграция моего сайта с календарем Google Рассчитать часы назад, используя время сервера в php без какой-либо другой даты простой jsonp не работает с php-сервером jQuery / PHP Проводка нескольких значений Массив для String PHP? PHP Предупреждение: PDOStatement :: execute (): SQLSTATE : Недопустимый номер параметра: параметры не были связаны Преобразование формата изображения PNG в JPEG без сохранения на диск – PHP Настройка Symfony с сервером Nginx Измените размер изображения и заполните пробелы пропорций цветом отображать данные из базы данных в раскрывающийся список CodeIgniter Стили не загружаются в пурпуре из-за неправильного URL-адреса, как это решить? Детальная форма электронной почты в Sencha Touch, предоставляющая исключение Msgstr "Не получать доступ к суперглобальному массиву $ _SERVER прямо" на Netbeans 7.4 для PHP эффективное решение: кодировка base32 в php

почему php выводит <br />, если я использовал header () или setcookie () только с конкретным запросом

Если я использовал header() или setcookie() PHP setcookie() <br /> на самом первом выходе !!!.

Он делает это только при обслуживании запроса уведомления об отправке сообщения веб-чата линии – это служба обмена сообщениями, которую я пытаюсь использовать, – этот запрос похож на PayPal-IPN . Я не знаю, что действительно так уникально в этом запросе, что делает PHP так себя вести !.

для целей отладки я сделал это в самой первой строке файла php frontController (каждый запрос сначала выдает этот файл точки входа)

 <?php ob_start(); header("fooBar");// or setcookie() file_put_contents("obContent_normal.txt", ob_get_contents()); //file_put_contents("obContent_line.txt", ob_get_contents()); // I use this when I handle the line notification request exit; 

Это содержимое obContent_normal.txt, которое заполняется, когда я делаю обычный запрос из браузера

это пустой файл

и это содержимое obContent_line.txt, оно заполняется, когда сервер текстовых сообщений уведомляет мой webhook с сообщением

<br /> <b>Warning</b>: Cannot modify header information - headers already sent in <b>C:\xampp\htdocs\domainname\public_html\frontController.SE.php</b> on line <b>3</b><br />


Сброс 2 Запросов

Я попытался выяснить, что является таким особенным в этом запросе на отправку строки, поэтому я сделал это для целей отладки

 <?php $requestData = ""; foreach ($_REQUEST as $key => $value) $requestData .= "REQUEST['$key'] => $value\n"; foreach ($_SERVER as $key => $value) $requestData .= "SERVER['$key'] => $value\n"; foreach ($_POST as $key => $value) $requestData .= "POST['$key'] => $value\n"; foreach ($_GET as $key => $value) $requestData .= "GET['$key'] => $value\n"; foreach ($_COOKIE as $key => $value) $requestData .= "COOKIE['$key'] => $value\n"; file_put_contents("request_normal.txt", $requestData); //file_put_contents("request_line.txt", $requestData);//I use this when I handle the line notification request exit; 

Это именно содержание request_normal.txt . он заполняется, когда я делаю обычный запрос из браузера

 SERVER['SCRIPT_URL'] => /lineWebhook SERVER['SCRIPT_URI'] => http://localhost/lineWebhook SERVER['MIBDIRS'] => C:/xampp/php/extras/mibs SERVER['MYSQL_HOME'] => \xampp\mysql\bin SERVER['OPENSSL_CONF'] => C:/xampp/apache/bin/openssl.cnf SERVER['PHP_PEAR_SYSCONF_DIR'] => \xampp\php SERVER['PHPRC'] => \xampp\php SERVER['TMP'] => \xampp\tmp SERVER['HTTP_HOST'] => localhost SERVER['HTTP_USER_AGENT'] => Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0 SERVER['HTTP_ACCEPT'] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 SERVER['HTTP_ACCEPT_LANGUAGE'] => en-US,en;q=0.5 SERVER['HTTP_ACCEPT_ENCODING'] => gzip, deflate SERVER['HTTP_REFERER'] => http://localhost/ SERVER['CONTENT_TYPE'] => application/x-www-form-urlencoded SERVER['CONTENT_LENGTH'] => 0 SERVER['HTTP_DNT'] => 1 SERVER['HTTP_CONNECTION'] => keep-alive SERVER['HTTP_UPGRADE_INSECURE_REQUESTS'] => 1 SERVER['PATH'] => C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\system32\config\systemprofile\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\PuTTY\;C:\Users\m.reda\Desktop;c:/xampp/mysql/bin/ SERVER['SystemRoot'] => C:\Windows SERVER['COMSPEC'] => C:\Windows\system32\cmd.exe SERVER['PATHEXT'] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC SERVER['WINDIR'] => C:\Windows SERVER['SERVER_SIGNATURE'] => <address>Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 Server at localhost Port 80</address> SERVER['SERVER_SOFTWARE'] => Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 SERVER['SERVER_NAME'] => localhost SERVER['SERVER_ADDR'] => ::1 SERVER['SERVER_PORT'] => 80 SERVER['REMOTE_ADDR'] => ::1 SERVER['DOCUMENT_ROOT'] => C:/xampp/htdocs/domainname/public_html SERVER['REQUEST_SCHEME'] => http SERVER['CONTEXT_PREFIX'] => SERVER['CONTEXT_DOCUMENT_ROOT'] => C:/xampp/htdocs/domainname/public_html SERVER['SERVER_ADMIN'] => postmaster@localhost SERVER['SCRIPT_FILENAME'] => C:/xampp/htdocs/domainname/public_html/frontController.SE.php SERVER['REMOTE_PORT'] => 58337 SERVER['GATEWAY_INTERFACE'] => CGI/1.1 SERVER['SERVER_PROTOCOL'] => HTTP/1.1 SERVER['REQUEST_METHOD'] => POST SERVER['QUERY_STRING'] => SERVER['REQUEST_URI'] => /lineWebhook SERVER['SCRIPT_NAME'] => /lineWebhook SERVER['PHP_SELF'] => /lineWebhook SERVER['REQUEST_TIME_FLOAT'] => 1512929177.986 SERVER['REQUEST_TIME'] => 1512929177 

и это как раз содержимое request_line.txt . Он заполняется, когда сервер текстовых сообщений уведомляет мой webhook с сообщением

 SERVER['SCRIPT_URL'] => /lineWebhook SERVER['SCRIPT_URI'] => http://e9f64521.ngrok.io/lineWebhook SERVER['MIBDIRS'] => C:/xampp/php/extras/mibs SERVER['MYSQL_HOME'] => \xampp\mysql\bin SERVER['OPENSSL_CONF'] => C:/xampp/apache/bin/openssl.cnf SERVER['PHP_PEAR_SYSCONF_DIR'] => \xampp\php SERVER['PHPRC'] => \xampp\php SERVER['TMP'] => \xampp\tmp SERVER['HTTP_X_LINE_SIGNATURE'] => SU5lorfDodlil02J3sn6rCI5ZlrN1N6mMv6U2KUcTGQ= SERVER['CONTENT_TYPE'] => application/json;charset=UTF-8 SERVER['CONTENT_LENGTH'] => 236 SERVER['HTTP_HOST'] => e9f64521.ngrok.io SERVER['HTTP_ACCEPT'] => */* SERVER['HTTP_USER_AGENT'] => LineBotWebhook/1.0 SERVER['HTTP_X_FORWARDED_PROTO'] => https SERVER['HTTP_X_FORWARDED_FOR'] => 203.104.146.154 SERVER['PATH'] => C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\system32\config\systemprofile\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files (x86)\Skype\Phone\;C:\Program Files\PuTTY\;C:\Users\m.reda\Desktop;c:/xampp/mysql/bin/ SERVER['SystemRoot'] => C:\Windows SERVER['COMSPEC'] => C:\Windows\system32\cmd.exe SERVER['PATHEXT'] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC SERVER['WINDIR'] => C:\Windows SERVER['SERVER_SIGNATURE'] => <address>Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 Server at e9f64521.ngrok.io Port 80</address> SERVER['SERVER_SOFTWARE'] => Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28 SERVER['SERVER_NAME'] => e9f64521.ngrok.io SERVER['SERVER_ADDR'] => ::1 SERVER['SERVER_PORT'] => 80 SERVER['REMOTE_ADDR'] => ::1 SERVER['DOCUMENT_ROOT'] => C:/xampp/htdocs/domainname/public_html SERVER['REQUEST_SCHEME'] => http SERVER['CONTEXT_PREFIX'] => SERVER['CONTEXT_DOCUMENT_ROOT'] => C:/xampp/htdocs/domainname/public_html SERVER['SERVER_ADMIN'] => postmaster@localhost SERVER['SCRIPT_FILENAME'] => C:/xampp/htdocs/domainname/public_html/frontController.SE.php SERVER['REMOTE_PORT'] => 58407 SERVER['GATEWAY_INTERFACE'] => CGI/1.1 SERVER['SERVER_PROTOCOL'] => HTTP/1.1 SERVER['REQUEST_METHOD'] => POST SERVER['QUERY_STRING'] => SERVER['REQUEST_URI'] => /lineWebhook SERVER['SCRIPT_NAME'] => /lineWebhook SERVER['PHP_SELF'] => /lineWebhook SERVER['REQUEST_TIME_FLOAT'] => 1512929548.099 SERVER['REQUEST_TIME'] => 1512929548 

Дополнительная информация

  • Это находится на локальном хосте, но он открыт для общественности https://ngrok.com/ .

  • версия PHP – 5.6.28

  • оконная машина с xampp
  • URL-адрес webhook – / lineWebhook (но сначала он обрабатывается файлом frontController)
  • Я нашел здесь подобную проблему, но ответа не получил.

Пожалуйста, помогите мне, что прошло несколько часов, и я не могу понять проблему в одиночку.

Почему PHP или Apache выводят это <br /> только с запросом уведомления о линии?


ОБНОВИТЬ

как сказал мне Лоуренс Черей в комментариях, которые я пробовал headers_sent() как это

 <?php ob_start(); header("X-TEST:foobar"); if (!headers_sent($filename, $linenum)) { echo "Headers not sent"; } else { echo "Headers already sent in $filename on line $linenum"; } file_put_contents("obContent.txt", ob_end_clean()); exit; 

и это файл obContent.txt, когда я делаю обычный запрос из моего браузера

BOOL (ложь)

и это файл obContent.txt, когда отправитель сообщения отправляет уведомление

<br /> <b>Warning</b>: Cannot modify header information - headers already sent in <b>C:\xampp\htdocs\accountantandprogrammer\public_html\frontController.SE.php</b> on line <b>3</b><br /> bool(true)

Обновить

Я проверил инструмент интроспекции ngroks, как сказал мне Лоуренс Череун , и это мой ответ на сервер, когда я обычно делаю запрос от моего браузера

 bool(false) 

и это ответ моего сервера в интроспективном инструменте ngroks, когда запрос, сделанный уведомлением сервера Line

 <br /> <b>Deprecated</b>: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: Cannot modify header information - headers already sent in <b>Unknown</b> on line <b>0</b><br /> <br /> <b>Warning</b>: Cannot modify header information - headers already sent in <b>C:\xampp\htdocs\accountantandprogrammer\public_html\frontController.SE.php</b> on line <b>32</b><br />