Як я можу отримати корисні повідомлення про помилки в PHP?


583

Досить часто я намагаюся запустити сценарій PHP і просто поверну порожній екран. Немає повідомлення про помилку; просто порожній екран. Причиною може бути проста помилка синтаксису (неправильна дужка, відсутня крапка з комою), або невдалий виклик функції або щось інше цілком.

Дуже важко зрозуміти, що пішло не так. Я закінчую коментування коду, всюди вводячи "ехо" заяви тощо, намагаючись звузити проблему. Але, безумовно, повинен бути кращий шлях, правда?

Чи є спосіб отримати PHP для створення корисного повідомлення про помилку, як це робить Java?




4
@JuannStrauss, це заниження. І коли ви нарешті бачите помилки, це говорить T_PAAMAYIM_NEKUDOTAYIM. Або, можливо, "повинен бути екземпляр цілого числа, заданого цілого числа" .
Pacerier

1
Підручник з цього приводу
Учень

Відповіді:


498

Для синтаксичних помилок потрібно включити відображення помилок у php.ini. За замовчуванням вони вимкнено, оскільки ви не хочете, щоб "клієнт" бачив повідомлення про помилки. Перегляньте цю сторінку в документації на PHP, щоб отримати інформацію про 2 директиви: error_reportingі display_errors. display_errorsце, мабуть, та, яку ви хочете змінити. Якщо ви не можете змінити php.ini, ви також можете додати наступні рядки до файлу .htaccess:

php_flag  display_errors        on
php_value error_reporting       2039

Ви можете розглянути можливість використання значення E_ALL (як згадував Gumbo) для вашої версії PHP для error_reportingотримання всіх помилок. більше інформації

3 інші елементи: (1) Ви можете перевірити файл журналу помилок, оскільки він буде мати всі помилки (якщо журнал не вимкнено). (2) Додавання наступних двох рядків допоможе вам налагодити помилки, які не є синтаксичними помилками:

error_reporting(-1);
ini_set('display_errors', 'On');

(3) Ще одним варіантом є використання редактора, який перевіряє на помилки під час введення, наприклад, PhpEd . PhpEd також постачається з налагоджувачем, який може надати більш детальну інформацію. (Налагоджувач PhpEd дуже схожий на xdebug і інтегрується безпосередньо в редактор, тому ви використовуєте 1 програму, щоб зробити все.)

Посилання Картмана також дуже добре: http://www.ibm.com/developerworks/library/os-debug/


25
2039 - це значення E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE. Дивіться docs.php.net/manual/en/errorfunc.constants.php
Gumbo

Мені подобається варіант файлу .htaccess. Це допомагає мені налагоджувати в області, яка не є частиною загальнодоступного веб-сайту. Дякую за цю пораду!
jacekn

1
Я хотів би додати, що помилки реєстрації файлів (і шукати їх там) - найкраще рішення. Не розраховуйте на відображення помилок на сторінці - вони можуть її зіпсувати, ви можете забути перетворити повідомлення про помилки на виробничому сайті, і це спричинить вам проблеми в майбутньому
Іван Ярич,

455

Нижче наведено всі помилки:

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

Також дивіться наступні посилання


28
Найкраще вносити ці зміни на рівні файлу .ini. Увімкнути повідомлення про помилки в межах сценарію марно, оскільки це не допоможе при синтаксичних помилках або інших фатальних помилках, які вбивають фазу компіляції. Сценарій вбивається задовго до того, як він починає виконувати та досягає переваг звітування.
Марк Б

Ви дійсно правильні. Я не помітив, що перехід до вашого власного сервера.
Eljakim

6
Запустіть phpinfo (), щоб знайти правильний файл php.ini. Шукайте рядок завантаженого файлу конфігурації .
нудне

1
Якщо ви шукаєте помилок, які виникають під час фази компіляції, перевірте свої журнали apache, які часто розміщені за адресою /var/log/apache2/error.log
csi

1
Ця відповідь буде невдалою на php7, коли включено суворе введення тексту, оскільки другий параметр ini_set- це рядок.
PeeHaa

175

Наступний код повинен відображати всі помилки:

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// other php code

?>

Єдиний спосіб генерувати порожню сторінку з цим кодом - це помилка в обробці вимкнення. Я скопіював і вставив це з власних програм, не перевіряючи його, але впевнений, що він працює.


4
Я отримую порожню сторінку з цього коду. Що ви маєте на увазі під "обробкою помилок у помилці" і що мені робити для вирішення проблеми?
Паоло М

@PaoloM, Він говорить про помилку у функції ShutdownHandlerвище. В основному, це зупинка злому замість правильної обробки помилок.
Pacerier

Дякую, було корисно, але як я можу відключити E_NOTICEпомилки в цій функції?
MajAfy

Це правильне рішення, але будьте обережні з виявленням інформації, коли виникає помилка ... (віддайте перевагу входу в журнал, а не відлуння користувачам)
Сем Джейсон Бреддок

1
Я використовую це, коли Symfony не вдається правильно зібрати фатальні помилки.
COIL

61

Помилки та попередження зазвичай з’являються у ваших налаштуваннях php.ini ....\logs\php_error.logабо ....\logs\apache_error.logзалежать від них.

Також корисні помилки часто спрямовуються до браузера, але оскільки вони не є дійсними html, вони не відображаються.

Отже, "tail -f"ваші файли журналу, і коли ви отримуєте порожній екран, використовуйте IEs" view "->" source "параметри меню для перегляду вихідних даних.


13
На жаль, джерело сторінки перегляду теж не відображає нічого.
Меттью Шарлі,

2
Помилки розбору повинні бути видимими в журналі помилок Apache, незалежно від того, які параметри у вас є деінде. Якщо у вас немає контролю над сервером, то отримати журнал помилок apache може бути складно, але я пропоную поговорити з вашим постачальником, і є способи викрити вам журнал помилок. Крім того, я можу лише запропонувати, що ще має - перевірити свій код для розбору помилок на вашому локальному сервері розробки перед тим, як розгорнутися до виробництва. Також валідаційна IDE, наприклад, PDT Eclipse, може бути корисною.
Гасс

5
Повертаючись до цього, у мене нещодавно виникла проблема переповнення стека, яка не генерувала жодних помилок навіть у журналах і не проявляла себе як така, поки я не встановив xdebug на сервер. Гах.
Меттью Шарлі

Якщо ви не можете змінити php.ini, створіть у ньому файл .htaccess php_flag display_errors 1.
Том

59

Ви можете включити наступні рядки у файл, який ви хочете налагодити:

error_reporting(E_ALL);
ini_set('display_errors', '1');

Це переосмислює параметри за замовчуванням у php.ini, завдяки чому PHP повідомляє про помилки в журнал.


2
Це правда. У цьому випадку значення повинні бути встановлені безпосередньо в ini - для чистого середовища розробки це може бути краще в будь-якому випадку.
Томалак

53

Конфігурація PHP

2 записи в php.ini диктують вихід помилок:

  1. display_errors
  2. error_reporting

У виробництві , display_errorsзазвичай встановлюється Off(що це хороша річ, тому що помилка відображення в виробничих об'єктах , як правило , не бажано!).

Однак у процесі розробки слід встановити значення On, щоб помилки відображалися. Перевір !

error_reporting(станом на PHP 5.3) за замовчуванням встановлено E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATEDзначення (тобто все показано, окрім повідомлень, суворих стандартів та попереджувальних повідомлень). Якщо ви сумніваєтесь, встановіть його E_ALLдля відображення всіх помилок. Перевір !

Ого! Без перевірки! Я не можу змінити php.ini!

Це ганьба. Зазвичай спільні хости не дозволяють змінювати файл php.ini, і такий варіант, на жаль, недоступний. Але не бійтеся! У нас є інші варіанти !

Конфігурація виконання

У бажаному сценарії ми можемо змінити записи php.ini під час виконання! Значить, він запуститься, коли сценарій працює! Солодке!

error_reporting(E_ALL);
ini_set("display_errors", "On");

Ці два рядки зроблять такий самий ефект, що і зміна записів php.ini, як описано вище! Дивовижно!

Я все ще отримую порожню сторінку / 500 помилок!

Це означає, що сценарій навіть не був запущений! Зазвичай це трапляється, коли у вас синтаксична помилка!

З синтаксичними помилками сценарій навіть не потрапляє до часу виконання. Він не вдається під час компіляції , що означає, що він буде використовувати значення в php.ini, які, якщо ви не змінилися, можуть не допустити відображення помилок.

Журнали помилок

Крім того, PHP за замовчуванням реєструє помилки. У спільному хостингу він може знаходитись у спеціальній папці або в тій самій папці, що й скрипт, що порушує правила.

Якщо у вас є доступ до php.ini, ви можете знайти його під error_logзаписом.


30

Існує дійсно корисне розширення під назвою " xdebug ", яке також зробить ваші звіти набагато приємнішими.


2
Дійсно, це дуже корисний інструмент налагодження - робить повідомлення про помилки набагато більш детальним, із повними слідами стека та змінними дампами та все.
hbw

2
Так. А потім скористайтеся чимось на зразок плагін VimDebugger, щоб перейти до вашого коду та з’ясувати, куди воно піде не так.
Сандер Маречаль

1
Тут NetBeans з xdebug. Це так приголомшливо. Я новачок у PHP (зазвичай ASP.NET) і раніше видавав ехо-заяви.
Деякий Канук

30

Я завжди використовую цей синтаксис в самому верху скрипту php.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

3
Вибачте, але -1 за те, що не читав інших опублікованих відповідей. Про це дбають у .htaccess, як уже згадувалося кілька разів.
Меттью Шарлі

12
звичайний "безкоштовний хостинг" ігнорує .htaccess
FDisk

27

Для швидкого, практичного усунення несправностей, як правило, пропоную ось так:

error_reporting(~0); ini_set('display_errors', 1);

бути поставленим на початку сценарію, який знаходиться під загрозою усунення неполадок. Це не є ідеальним, ідеальний варіант полягає в тому, що ви також дозволяєте це в php.iniі, що ви реєструєте помилки в PHP, щоб ловити синтаксис та помилки запуску.

Наведені тут налаштування відображають усі помилки, сповіщення та попередження, включаючи суворі, незалежно від версії PHP.

Наступні речі, які слід врахувати:

  • Встановіть Xdebug та увімкніть віддалену налагодження за допомогою IDE.

Дивіться також:


27

Можна зареєструвати гачок, щоб побачити останню помилку чи попередження.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

додавання цього коду до початку index.php допоможе вам налагодити проблеми.


1
Це чисте золото для людей, які застрягли у веб-хостингах, які не показують помилок, але дозволяють нульовий доступ до журналу
Рафаель Мена Баррето,

18

Це проблема завантаженої та конфігурації виконання

Важливо визнати, що помилка синтаксису чи помилка розбору трапляються під час кроку компіляції чи розбору , а це означає, що 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 не зможе проаналізувати ваш код, оскільки він ніколи не досяг часу виконання.


17

Якщо ви супер класний, ви можете спробувати:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

Це відображатиме помилки лише під час запуску на локальному рівні. Він також дає змінну test_server для використання в інших місцях, де це доречно.

Будь-які помилки, що трапляються до запуску сценарію, не будуть виявлені, але для 99% помилок, які я роблю, це не проблема.


2
Якщо ви розрізняєте локальне та виробниче середовище, вам слід просто включити або відключити помилки глобально (у вашому php.ini), а не в коді, який також може бути виробничим кодом. Якщо вам потрібно налагодити виробничий веб-сайт у його виробничому середовищі та хочете, щоб ви могли переглядати помилки, використовуйте $_SERVER['REMOTE_HOST']для перевірки, чи є клієнт, ну ви.
Jaap Haagmans

17

У верхній частині сторінки виберіть параметр

error_reporting(E_ERROR | E_WARNING | E_PARSE);

16

Щоб зберегти це і зробити його приємним, ви можете відредагувати файл php.ini. Зазвичай він зберігається в /etc/php.iniабо /etc/php/php.ini, але більш місцеві php.iniможуть його перезаписати, залежно від правил налаштування вашого постачальника хостингу. Перевірте phpinfo()файл Loaded Configuration Fileу верхній частині, щоб переконатися, який із них завантажується останнім часом.

Шукайте в цьому файлі помилки display_error. Повинно бути лише 3 екземпляри, з яких 2 коментовані.

Змініть коментований рядок на:

display_errors = stdout

16

Не знаю, якщо це допоможе, але ось фрагмент мого стандартного конфігураційного файлу для PHP-проектів. Я схильний не занадто сильно залежати від конфігурацій apache, навіть від власного сервера.

У мене ніколи не виникає проблема помилок, тому, можливо, щось тут дасть вам уявлення.

Відредаговано для показу APPLICATON_LIVE

/*
APPLICATION_LIVE will be used in process to tell if we are in a development or production environment.  It's generally set as early as possible (often the first code to run), before any config, url routing, etc.
*/

if ( preg_match( "%^(www.)?livedomain.com$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', true);
} elseif ( preg_match( "%^(www.)?devdomain.net$%", $_SERVER["HTTP_HOST"]) ) {
    define('APPLICATION_LIVE', false);
} else {
    die("INVALID HOST REQUEST (".$_SERVER["HTTP_HOST"].")");
    // Log or take other appropriate action.
}


/*
--------------------------------------------------------------------
DEFAULT ERROR HANDLING
--------------------------------------------------------------------
Default error logging.  Some of these may be changed later based on APPLICATION_LIVE.
*/
error_reporting(E_ALL & ~E_STRICT);
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");
ini_set ( "log_errors", 1);
ini_set ( "log_errors_max_len", 0);
ini_set ( "error_log", APPLICATION_ROOT."logs/php_error_log.txt");
ini_set ( "display_errors", "0");
ini_set ( "display_startup_errors", "0");

if ( ! APPLICATION_LIVE ) {
    // A few changes to error handling for development.
    // We will want errors to be visible during development.
    ini_set ( "display_errors", "1");
    ini_set ( "display_startup_errors", "1");
    ini_set ( "html_errors", "1");
    ini_set ( "docref_root", "http://www.php.net/");
    ini_set ( "error_prepend_string", "<div style='color:red; font-family:verdana; border:1px solid red; padding:5px;'>");
    ini_set ( "error_append_string", "</div>");
}

@Eli. Це має накладні витрати на кожну запит на сторінку .
Pacerier

1 для концепції, що не враховує налаштування налагодження, але сервер налаштований, добре, коли ви розгортаєте або підтримуєте (у стадії розробки)
justnajm

15
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

Крім того, ви можете отримати більш детальну інформацію за допомогою xdebug .


Xdebug можна включити з php.ini
jewelhuq

15

Я рекомендую Nette Tracy для кращої візуалізації помилок та виключень у PHP:

Скріншот Nette Tracy


3
Трейсі дбає про правильне налаштування всіх помилок на дисплеї та варіантів повідомлення про помилки, щоб забезпечити вихід у таких ситуаціях, як описано в оригінальній публікації ... Тож цей інструмент особливо корисний для звернення до запитувача "Чи може хтось порекомендувати хороші поради щодо налагодження PHP? ".
Ян Драбек


10
error_reporting(E_ALL | E_STRICT);

І увімкніть помилки відображення в php.ini


9

Ви можете зареєструвати власний обробник помилок у PHP. Передача всіх помилок у файл, можливо, допоможе вам у таких незрозумілих випадках. Зауважте, що ваша функція буде викликана, незалежно від того, для чого встановлено поточне повідомлення про помилку . Дуже основний приклад:

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');

7

Дві ключові лінії, необхідні для отримання корисних помилок із PHP:

ini_set('display_errors',1);
 error_reporting(E_ALL);

Як вказували інші учасники, вони вимикаються за замовчуванням з міркувань безпеки. Як корисна порада - коли ви налаштовуєте свій сайт, зручно робити перемикач для різних середовищ, щоб ці помилки були увімкнено за умовчанням у вашому локальному середовищі та середовищі розробки. Цього можна досягти за допомогою наступного коду (в ідеалі у вашому index.php або конфігураційному файлі, щоб це було активним з самого початку):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}


6

відкрийте свій php.ini, переконайтесь, що він встановлений на:

display_errors = On

перезавантажте ваш сервер.


6

Ви також можете спробувати PHPStorm як редактор коду. Він знайде багато PHP та інших помилок синтаксису прямо під час введення в редакторі.


6

якщо ви користувач ubuntu, тоді перейдіть на свій термінал і запустіть цю команду

sudo tail -50f /var/log/apache2/error.log

де буде відображено останні 50 помилок. Існує файл помилок error.logдля apache2, який записує всі помилки.


5

Щоб увімкнути повне повідомлення про помилки, додайте це до свого сценарію:

error_reporting(E_ALL);

Це призводить до появи навіть мінімальних попереджень. І, про всяк випадок:

ini_set('display_errors', '1');

Примусить відображення помилок. Це слід вимкнути на виробничих серверах, але не тоді, коли ви розробляєте.


Як і у відповіді Томалака, це не працює для синтаксичних помилок.
Дарріл Хайн

5

"ПОМИЛКИ" - це найкорисніші речі для розробників, які знають свої помилки, і вирішили їх, щоб зробити систему бездоганною.

PHP надає кілька кращих способів дізнатися розробників, чому і де їх фрагмент коду отримує помилки, тому, знаючи ці помилки, розробники можуть зробити свій код кращим багатьма способами.

Найкращі способи написання наступних двох рядків у верхній частині сценарію, щоб отримати всі повідомлення про помилки:

error_reporting(E_ALL);
ini_set("display_errors", 1);

Ще один спосіб використання інструментів налагодження, таких як xdebug у вашому IDE.


4

Ви можете ввімкнути повне повідомлення про помилки (включаючи повідомлення та суворі повідомлення). Деякі люди вважають це занадто багатослівним, але варто спробувати. Набір error_reportingдля E_ALL | E_STRICTвашої php.ini.

error_reporting = E_ALL | E_STRICT

E_STRICT повідомлять вас про застарілі функції та дасть рекомендації щодо найкращих методів виконання певних завдань.

Якщо ви не хочете повідомлень, але ви вважаєте, що інші типи повідомлень є корисними, спробуйте виключити повідомлення:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

Також переконайтеся, що display_errorsце включено в php.ini. Якщо ваша версія PHP старша за 5.2.4, встановіть її на On:

display_errors = "On"

Якщо ваша версія 5.2.4 або новіша версія, використовуйте:

display_errors = "stderr"

4

Окрім повідомлень про помилки та налаштування display_errors ini, ви можете отримати помилки SYNTAX з файлів журналів вашого веб-сервера. Коли я розробляю PHP, я завантажую в свій редактор веб-сервер системи розробки. Кожен раз, коли я тестую сторінку і отримую порожній екран, файл журналу залишається розмитим, і мій редактор запитує, чи хочу я його перезавантажити. Коли я це роблю, я стрибаю на дно, і виникає синтаксична помилка. Наприклад:

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9

3

Для тих, хто використовує nginx і має білий екран навіть для файлів із <?php echo 123;. У моєму випадку у мене не було цієї необхідної опції для PHP у файлі конфігурації nginx:

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

Ця опція не була у файлі fastcgi_params, тому PHP не працював і помилок у журналах не було.


У мене була така ж проблема і через те, що у файлі конфігурації за замовчуванням Nginx відсутній цей рядок.
Салем
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.