Это проблема загрузки и конфигурации во время выполнения
Важно признать, что синтаксическая ошибка или ошибка синтаксического анализа происходят во время этапа компиляции или синтаксического анализа , что означает, что PHP будет запускаться до того, как у него даже появится шанс выполнить любой ваш код. Так что, если вы изменяете display_errors
конфигурацию PHP во время выполнения (это включает в себя что-либо от использования ini_set
в вашем коде до использования .htaccess, который является файлом конфигурации времени выполнения), тогда будут задействованы только загруженные параметры конфигурации по умолчанию .
Как всегда избегать WSOD в разработке
Чтобы избежать WSOD вы хотите , чтобы убедиться , что ваш загруженный файл конфигурации имеет display_errors
на и error_reporting
набор для -1
( это эквивалентно E_ALL , поскольку он гарантирует , что все биты включены , независимо от того, какой версии PHP вы бежите ). Не задавайте жестко постоянное значение E_ALL, потому что это значение может меняться в разных версиях PHP.
Loaded конфигурации или ваш загруженный php.ini
файл или ваш apache.conf
или httpd.conf
или VirtualHost файла. Эти файлы читаются только один раз на этапе запуска (например, при первом запуске apache httpd или php-fpm) и переопределяются только изменениями конфигурации среды выполнения. Убедившись , что display_errors = 1
и error_reporting = -1
в ваших загруженных файлов конфигурации обеспечивает проведение, что вы никогда не будете видеть WSOD независимо от синтаксиса или синтаксического анализа ошибок , которые происходят до изменения времени выполнения , как ini_set('display_errors', 1);
или error_reporting(E_ALL);
может иметь место.
Как найти ваши (php.ini) загруженные файлы конфигурации
Чтобы найти загруженные файлы конфигурации, просто создайте новый файл PHP только со следующим кодом ...
<?php
phpinfo();
Затем направьте туда свой браузер и посмотрите на проанализированный загруженный файл конфигурации и дополнительные INI-файлы , которые обычно находятся вверху phpinfo()
и будут содержать абсолютный путь ко всем загруженным файлам конфигурации.
Если вы видите (none)
вместо файла, это означает, что у вас нет php.ini в пути к файлу конфигурации (php.ini) . Таким образом, вы можете скачать отсюда php.ini, поставляемый в комплекте с PHP, и скопировать его в путь к файлу конфигурации как php.ini, а затем убедиться, что у вашего пользователя php достаточно прав для чтения из этого файла. Вам нужно будет перезапустить httpd или php-fpm, чтобы загрузить его. Помните, что это файл разработки php.ini, который поставляется в комплекте с источником PHP. Поэтому, пожалуйста, не используйте его в производстве!
Только не делай этого в производстве
Это действительно лучший способ избежать WSOD в разработке. Любой, кто предложит вам поместить ini_set('display_errors', 1);
или error_reporting(E_ALL);
наверх вашего скрипта PHP или использовать .htaccess, как вы сделали здесь, не поможет вам избежать WSOD, когда возникает синтаксическая ошибка или ошибка синтаксического анализа (как в вашем случае здесь), если ваш загруженный файл конфигурации был display_errors
выключен.
Многие люди (и стандартные установки PHP) будут использовать производственный ini-файл, который display_errors
по умолчанию отключен, что обычно приводит к тому же разочарованию, которое вы испытали здесь. Поскольку PHP уже отключил его при запуске, он сталкивается с синтаксической ошибкой или ошибкой синтаксического анализа и не выдает ничего. Вы ожидаете, что ваша ini_set('display_errors',1);
верхняя часть PHP-скрипта должна была этого избежать, но не имеет значения, если PHP не сможет проанализировать ваш код, потому что он никогда не достигнет времени выполнения.