- усі файли PHP повинні використовувати кінець рядка Unix LF (перевод рядка).
- всі файли PHP повинні закінчуватися одним порожнім рядком.
- закриваючий тег ?> має бути опущений у файлах, що містять лише PHP.
- всі файли PHP повинні закінчуватися одним порожнім рядком.
- закриваючий тег ?> має бути опущений у файлах, що містять лише PHP.
Зустрівши будь-який символ, інтерпретатор РНР має на увазі, що починається виведення НТТР документа та формування попередніх йому НТТР заголовків завершено. Тому пізніші спроби надіслати НТТР заголовки будуть завершуватися помилкою. Якщо завершальний тег не використовується, такі помилки виключаються як клас.
Без використання візуального редактора з підсвічуванням коду дуже складно помітити кінцеві символи пробілів після кінцевого тега ?>. Наприклад, у стандартній збірці Far Manager проміжки непомітні.
Якщо пробіл або будь-який інший символ після закриваючого тега ?> існує, він інтерпретується як частина тіла відповіді, і в разі підключення даного файлу за допомогою конструкції Include, він буде відправлений браузеру, що потягне за собою відправлення заголовків. Після цього неможливо встановити куки, або надіслати заголовки, наприклад, з переадресацією.
Продемонструємо все вище описане на прикладі, для цього створимо файл із пробілом після ?>:
<?php
function example() { }
?>І підключимо його до такого виводу:<?php
include('file.php');
header("Content-Type: text/html; charset=utf-8");Нам з'явиться помилка:Warning: Cannot modify header information - headers already sent by (output started at file.php:3) in file.php on line 3Обов'язково перевірте директиву Output_buffering, яка включає та вимикає буферизацію виводу. Якщо ця директива увімкнена, ви не побачите помилок виду "Cannot modify header information - headers already sent".
Для себе можна сформулювати правило: ніколи не закінчувати закриваючим ?> тегом у файлі, в якому тільки код PHP. І навпаки: у файлі, в якому змішаний PHP і HTML завжди писати закриваючий тег.