Це проблема завантаженої та конфігурації виконання
Важливо визнати, що помилка синтаксису чи помилка розбору трапляються під час кроку компіляції чи розбору , а це означає, що PHP буде порушено, перш ніж у нього навіть з’явиться можливість виконати будь-який ваш код. Отже, якщо ви змінюєте display_errors
конфігурацію PHP під час виконання (це включає в себе все, від використання ini_set
у вашому коді до використання .htaccess, який є конфігураційним файлом виконання), відтворюються лише налаштовані налаштування конфігурації за замовчуванням .
Як завжди уникати WSOD у розвитку
Щоб уникнути WSOD ви хочете , щоб переконатися , що ваш долучення конфігурації має display_errors
на і error_reporting
набір для -1
( це еквівалентно E_ALL , оскільки він гарантує , що всі біти включаються незалежно від того, яка версія PHP ви працюєте ). Не жорстко кодуйте постійне значення E_ALL, оскільки це значення може змінюватися між різними версіями PHP.
Завантажена конфігурація - це завантажений 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 не зможе проаналізувати ваш код, оскільки він ніколи не досяг часу виконання.