У меня такой код:
<!DOCTYPE html> <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $cookie_name = "user"; $cookie_value = "John Doe"; setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day ?> <html> <body> <?php if (!isset($_COOKIE[$cookie_name])) { echo "Cookie named '" . $cookie_name . "' is not set!"; } else { echo "Cookie '" . $cookie_name . "' is set!<br>"; echo "Value is: " . $_COOKIE[$cookie_name]; } ?> </body> </html>
и из моих знаний он должен вернуть предупреждение
Cannot modify header information - headers already sent by
Как и в этом вопросе Как исправить ошибку «Заголовки уже отправлены» на PHP, но я не получаю предупреждения и cookie. Почему это? Является ли php добавлением какого-то кеша, и теперь вы можете отправлять заголовки после отправки текста? Я использую php 5.6.11.
Если вы используете output_buffering = On
в php.ini
вы можете отправлять файлы cookie после отправки заголовков.
Это замечается в комментарии php.ini:
Буферизация вывода позволяет отправлять строки заголовков (включая файлы cookie) даже после отправки содержимого тела по цене медленного замедления выходного уровня PHP. Вы можете включить буферизацию вывода во время выполнения, вызывая функции буферизации вывода. Вы также можете включить буферизацию вывода для всех файлов, установив эту директиву в положение «Вкл.». Если вы хотите ограничить размер буфера определенным размером – вы можете использовать максимальное количество байтов вместо «Вкл.» В качестве значения для этой директивы (например, output_buffering = 4096).