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