Почему 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.

@+