PHP Встроенный веб-сервер и синтаксическая ошибка в скрипте маршрутизатора

Я использую Встроенный веб-сервер PHP в целях тестирования. Например, с помощью простого скрипта роутера:

<?php
echo 'Hello world';

Запуск с помощью php -S localhost:8000 router.php. Работает.

Теперь допустим, что я делаю синтаксическую ошибку в скрипте маршрутизатора (например, отсутствует точка с запятой):

<?php
echo 'Hello world'

и запустите сервер разработки той же командой.

При достижении localhost:8000 в браузере возникает ошибка 404: Запрошенный ресурс / не найден на этом сервере. Это не дает мне абсолютно никакого представления о проблеме или размещении синтаксической ошибки. Терминал, в котором я запускал веб-сервер, также не показывает никаких ошибок (кроме 404).

У меня отчет об ошибках установлен на E_ALL в php.ini. У меня display_errors установлено на On.

Где искать сообщение об ошибке в таком случае? Как заставить PHP отображать такие ошибки в браузере вместо страницы с ошибкой 404?


person fracz    schedule 11.12.2020    source источник
comment
Технически это не синтаксическая ошибка. Если после этой строки в сценарии нет больше кода.   -  person El_Vanja    schedule 11.12.2020
comment
Вы уверены, что сделали настройки в правильном php.ini?   -  person CBroe    schedule 11.12.2020
comment
Да. Даже отобразил phpinfo() внутри скрипта маршрутизатора и подтвердил, что установлены E_ALL и display_errors.   -  person fracz    schedule 11.12.2020


Ответы (1)


После некоторых проб и ошибок я пришел к выводу, что php-builtin-server не будет регистрировать ошибку ни в каком файле, а будет напрямую выводить на консоль и отправлять в браузер, но только в том случае, если файл php не содержит лексической ошибки. Я не могу найти никакой документации по этому вопросу, поэтому не стесняйтесь исправлять меня.

Можно выполнить простой обходной путь: проверить лексический файл php с помощью php -l перед запуском php-builtin-server. Чтобы упростить задачу, создайте для него пакетный файл.

окна

создайте php-srv.bat (или любое допустимое имя) с содержимым:

php -l %1 | find /i "No syntax errors"
if not errorlevel 1 (
   php -S localhost:8000 %1
)

выполнить его с помощью php-srv route.php

линукс

создайте php-srv.sh (или любое допустимое имя) с содержимым:

if php -l $1 | grep 'No syntax errors detected in'; then
    php -S localhost:8000 $1
fi

сделать его исполняемым с помощью chmod, а затем выполнить с помощью ./php-srv.sh route.php

Надеюсь, это поможет

person Susilo    schedule 11.12.2020