Почему PHP 5.2.14 не отображает никаких ошибок (даже из командной строки)?
У меня есть PHP 5.2.10 и PHP 5.2.14 (x86 non-threadsafe Win32 builds), установленные на сервере Windows 2008 R2 и 64-разрядной версии Windows 7.
По какой-то причине PHP 5.2.14 отказывается отображать сообщения об ошибках.
Даже когда я устанавливаю следующие параметры в php.ini
, я не получаю никаких сообщений об ошибках, если я использую 5.2.14:
error_reporting = E_ALL
display_errors = On
Это происходит даже при запуске теста script из командной строки с помощью php.exe
с преднамеренной синтаксической ошибкой:
C:\PHP > php test.php
PHP использует правильный файл php.ini
, потому что я могу видеть, что мои настройки меняются при запуске php.exe -i
.
Я также замечаю, что php.exe
в PHP 5.2.14 очень медленно запускается.
Когда я выполняю тот же набор тестов, используя PHP 5.2.10, на тех же машинах, я получаю сообщения об ошибках, которые были достаточно точными.
Оба файла php.ini
являются запасами (на основе php.ini-recommended
), но с измененными настройками error_reporting
и display_errors
.
Ответы
Ответ 1
Возможно, вам придется включить display_startup_errors
:
display_startup_errors boolean
Даже когда display_errors
включен, ошибки, возникающие во время запуска PHP, не отображаются. Настоятельно рекомендуется оставить display_startup_errors
выключенным, кроме отладки.
Вы также можете попробовать вставить файл с помощью c:\php>php -l test.php
, чтобы проверить наличие синтаксических ошибок.
Ответ 2
Я нашел это действительно раздражающим, поэтому вот стратегия проверки синтаксиса из CLI:
- Не загружайте файл ini.
- Включение display_errors и display_startup_errors явно.
php -n -l -d display_errors -d display_startup_errors path/to/your/phpfile.php
$ php -h
-n No php.ini file will be used
-l lint, syntax checking only
-d foo[=bar] Define INI entry foo with value 'bar'
Ответ 3
Я запускаю более поздний PHP (5.4.24), но в этих других ответах отсутствует опция -d
, которую я нашел в другом месте, что делает PHP понятным разбор ошибки при запуске из cli:
php -d display_errors test.php
Это лучший ответ на вопрос, который я искал. Запуск linter с помощью -l
сообщает только "Анализ ошибок foo.php"
Ответ 4
В последнее время мне пришлось работать над другим проектом... Не имея возможности отлаживать, у меня не было выбора, кроме как проверить это: "error_reporting (0);"
Итак, проверьте исходный код. Найдите что-то вроде этого: "error_reporting (0);".
Как только вы его нашли, прокомментируйте это!
Нормальный, вам не нужно указывать это в исходном коде, но в php.ini.
@+