Intereting Posts
Не работает переменная сеанса WordPress Как предотвратить множественную отправку форм при нескольких кликах в PHP Частота PHP для случая возникновения события Использование wp_mail () вместо mail () в WordPress не работает PhpStorm xdebug не будет отлаживать python и php bcrypt Я хочу запустить wp_query в отдельном php-файле для вызова ajax Chart.js – Получение данных из базы данных с использованием mysql и php В PHP лучший способ обеспечить текущий рабочий каталог такой же, как скрипт, при использовании CLI Как установить настраиваемое сообщение об ошибке с помощью form_validation И CodeIgniter Проверка пустого поля с MySQL Отображать текст один раз внутри цикла while в первом цикле Разрешить вход в систему пользователя для загрузки файла на PHP еще никто не может Ошибка установки Symfony2: несуществующий сервис "security.authentication.factory.form" хороший ресурс или книга для архивирования объектно-ориентированного программного обеспечения

PHP end tag "?>"

У меня было интересное явление с концевым тегом PHP. У меня был php-файл, который был выполнен с помощью вызова Ajax. В php-файл был включен файл библиотеки php с различными функциями. Когда эта библиотека была включена, в php-ответ включался пучок пустых строк. Когда я удалил конец тега из библиотеки, это остановилось. Может ли кто-нибудь объяснить мне, что здесь происходит?

Это хорошо документировано. Из руководства PHP :

Закрывающий тег блока PHP в конце файла является необязательным, и в некоторых случаях его исключение полезно при использовании include () или require (), поэтому нежелательные пробелы не будут возникать в конце файлов, и вы все равно будете иметь возможность добавлять заголовки к ответу позже. Это также удобно, если вы используете буферизацию вывода и не хотели бы видеть добавленные нежелательные пробелы в конце частей, сгенерированных включенными файлами.

Опускание закрывающего тега помогает предотвратить случайное добавление пробелов или новых строк в конец файла.

Это основная функция PHP: в отличие от других языков вам нужно пометить PHP-код специальным тегом (обычно <?php ), потому что все остальное считается литералом:

 This is not PHP <?php echo 'This is PHP' . PHP_EOL; ?> This is not PHP either 
 D:\tmp>php test.php This is not PHP This is PHP This is not PHP either 

Хотя в руководстве упоминается HTML , PHP не знает и не заботится о том, какой тип контента находится за пределами его тегов.

Если вы забудете закрыть блок PHP, когда последует дальнейший материал, вы обычно получаете синтаксическую ошибку:

 This is not PHP <?php echo 'This is PHP' . PHP_EOL; This is not PHP either 
 D:\tmp>php test.php PHP Parse error: syntax error, unexpected 'is' (T_STRING) in D:\tmp\borrame.php on line 6 

Пустые строки – это особый случай, потому что они действительны и почти невидимы почти на всех языках (PHP, HTML, CSS, JavaScript …), поэтому они часто остаются незамеченными.

После удаления тега ?> , Ваши литеральные пустые строки исчезли из вывода скрипта, потому что они стали частью кода PHP (и, как таковые, они начали игнорироваться).

Конечно, пустые строки игнорируются PHP, но не обязательно тем, что вы генерируете, что, как я уже сказал, не обязательно должно быть HTML: это может быть изображение, документ PDF, электронная таблица Excel. Бегущие строки Bogus можно легко избежать, не закрывая последний блок PHP, когда это последняя часть файла.