Я проверил свой файл PHP ini
и установил ошибки отображения, а также сообщение об ошибках E_ALL
. Я перезапустил веб-сервер Apache.
Я даже поставил эти строки в верхней части моего скрипта, и он даже не улавливает простые ошибки синтаксического анализа. Например, я объявляю переменные с "$"
и я не закрываю утверждения ";"
, Но все мои скрипты показывают пустую страницу об этих ошибках, но я хочу увидеть ошибки в выходе моего браузера.
error_reporting(E_ALL); ini_set('display_errors', 1);
Что делать?
Это всегда работает для меня:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Однако это не делает PHP для выявления ошибок синтаксического анализа – единственный способ показать эти ошибки – это изменить ваш php.ini с помощью этой строки:
display_errors = on
Вы не можете улавливать ошибки разбора при включении вывода ошибок во время выполнения, потому что он анализирует файл до фактического выполнения чего-либо (и поскольку он обнаруживает ошибку во время этого, он ничего не выполнит). Вам нужно будет изменить фактическую конфигурацию сервера, чтобы display_errors был включен, и использовался соответствующий уровень error_reporting. Если у вас нет доступа к php.ini, вы можете использовать .htaccess или подобное, в зависимости от сервера.
Этот вопрос может предоставить дополнительную информацию.
Внутри вашего php.ini :
display_errors = on
Затем перезапустите веб-сервер.
Чтобы отобразить все ошибки, вам необходимо:
1. Возьмите эти строки в скрипте PHP, который вы вызываете из браузера (обычно index.php
):
error_reporting(E_ALL); ini_set('display_errors', 1);
2. (a) Убедитесь, что этот скрипт не имеет синтаксических ошибок
-или-
2. (b) Установите display_errors = On
в свой php.ini
В противном случае он не может даже запустить эти 2 строки!
Вы можете проверить наличие синтаксических ошибок в вашем скрипте, выполнив (в командной строке):
php -l index.php
Если вы включите скрипт из другого скрипта PHP, он отобразит синтаксические ошибки во включенном скрипте. Например:
index.php
error_reporting(E_ALL); ini_set('display_errors', 1); // Any syntax errors here will result in a blank screen in the browser include 'my_script.php';
my_script.php
adjfkj // This syntax error will be displayed in the browser
Некоторые веб-хостинг-провайдеры позволяют вам изменять параметры PHP в файле .htaccess .
Вы можете добавить следующую строку:
php_value display_errors 1
У меня была такая же проблема, как у вас, и это решение исправило это.
Вы можете обнаружить, что все настройки для «сообщений об ошибках» или «ошибок отображения» не работают в PHP 7. Это связано с тем, что обработка ошибок изменилась. Попробуйте это вместо этого:
try{ // Your code } catch(Error $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; }
Или, чтобы ловить исключения и ошибки за один раз (это не соответствует обратной совместимости с PHP 5):
try{ // Your code } catch(Throwable $e) { $trace = $e->getTrace(); echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line']; }
Это будет работать:
<?php error_reporting(E_ALL); ini_set('display_errors', 1); ?>
Использование:
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Это лучший способ написать его, но синтаксическая ошибка дает пустой вывод, поэтому используйте консоль для проверки синтаксических ошибок. Лучший способ отладки PHP-кода – использовать консоль; выполните следующие действия:
php -l phpfilename.php
Создайте файл php.ini в папке, где находится ваш PHP-файл.
Внутри php.ini добавить следующий код (я даю простую ошибку, показывающую код):
display_errors = on display_startup_errors = on
Вот сценарий PHP:
<?php ini_set("display_startup_errors", 1); ini_set("display_errors", 1); /* Reports for either E_ERROR | E_WARNING | E_NOTICE | Any Error*/ error_reporting(E_ALL); echo(abc); /* Notice: abc is an undefined constant */ ?>
-<?php ini_set("display_startup_errors", 1); ini_set("display_errors", 1); /* Reports for either E_ERROR | E_WARNING | E_NOTICE | Any Error*/ error_reporting(E_ALL); echo(abc); /* Notice: abc is an undefined constant */ ?>
Для более подробного объяснения ошибок PHP посетите PHP Error – error_reporting () .
При использовании PHP в качестве модуля Apache мы можем изменить настройки конфигурации с помощью директив в файлах конфигурации Apache (например, httpd.conf) и .htaccess. Для этого вам понадобятся привилегии «AllowOverride Options» или «AllowOverride All».
Проверь это
http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess
Если вы каким-то образом окажетесь в ситуации, когда вы не можете модифицировать настройку через php.ini
или .htaccess
вам не повезло, если вы отображаете ошибки, когда ваши скрипты PHP содержат ошибки синтаксического анализа. Затем вам придется решить, что нужно вставлять файлы в командной строке следующим образом:
find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"
Если ваш хост заблокирован, что он не позволяет изменять значение через php.ini
или .htaccess
, он также может запретить изменение значения через ini_set
. Вы можете проверить это со следующим скриптом PHP:
<?php if( !ini_set( 'display_errors', 1 ) ) { echo "display_errors cannot be set."; } else { echo "changing display_errors via script is possible."; }
Если, несмотря на все приведенные выше ответы (или вы не можете отредактировать файл php.ini), вы все равно не можете получить сообщение об ошибке, попробуйте создать новый файл PHP, который будет включать отчет об ошибках, а затем включить файл проблемы. например:
error_reporting(9999999); ini_set('display_errors', 1); require_once('problem_file.php');
Несмотря на то, что все правильно установлено в моем файле php.ini
, это был единственный способ поймать ошибку пространства имен. Мой точный сценарий:
//file1.php namespace a\b; class x { ... } //file2.php namespace c\d; use c\d\x; //Dies because it's not sure which 'x' class to use class x { ... }
Установите это в index.php
ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL);
Обычно я бы использовал следующий код в моем проекте с простым php, который очень мал, если проект станет большим, тогда я порекомендую.
if(!defined('ENVIRONMENT')){ define('ENVIRONMENT','DEVELOPMENT'); } $base_url = null; if (defined('ENVIRONMENT')) { switch (ENVIRONMENT) { case 'DEVELOPMENT': $base_url = 'http://localhost/product/'; ini_set('display_errors',1); ini_set('display_startup_errors',1); error_reporting(E_ALL|E_STRICT); break; case 'PRODUCTION': $base_url = 'Prod url'; /* https://google.com */ error_reporting(0); /* Mechanism to log errors */ break; default: exit('The application environment is not set correctly.'); } }
Надеюсь это поможет.
Вы можете сделать что-то вроде ниже:
Установите ниже параметров в основной файл индекса
ini_set('display_errors', 1); ini_set('display_startup_errors', 1);
Затем, исходя из вашего требования, вы можете выбрать, что вы хотите показать:
Для всех ошибок, предупреждений и уведомлений
error_reporting(E_ALL); OR error_reporting(-1);
Для всех ошибок
error_reporting(E_ERROR);
Для всех предупреждений
error_reporting(E_WARNING);
Для всех уведомлений
error_reporting(E_NOTICE);
Для получения дополнительной информации проверьте здесь
Поскольку мы теперь запускаем PHP7, ответы, приведенные здесь, не являются правильными. Единственный, все еще в порядке, тот, что у Фрэнка Форте, поскольку он говорит о PHP7. С другой стороны, вместо того, чтобы пытаться поймать ошибку с помощью try / catch, вы можете использовать трюк: use include. Здесь 3 части кода:
Файл: tst1.php
<?php error_reporting(E_ALL); ini_set('display_errors','On'); // Missing " and ; echo "Testing ?>
Запуск этого в PHP7 ничего не покажет
Теперь попробуйте следующее:
Файл: tst2.php
<?php error_reporting(E_ALL); ini_set('display_errors','On'); include ("tst3.php"); ?>
Файл: tst3.php
<?php // Missing " and ; echo "Testing ?>
Теперь запустите tst2, который установит отчет об ошибках, затем включите tst3. Ты увидишь:
Ошибка анализа: синтаксическая ошибка, неожиданный конец файла, ожидающая переменная (T_VARIABLE) или $ {(T_DOLLAR_OPEN_CURLY_BRACES) или {$ (T_CURLY_OPEN) в tst3.php в строке 4
Вы можете добавить свой собственный обработчик ошибок, который может предоставить дополнительную информацию об отладке. Кроме того, вы можете настроить его для отправки по электронной почте.
function ERR_HANDLER($errno ,$errstr, $errfile, $errline){ $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br> <b>File:</b> $errfile <br> <b>Line:</b> $errline <br> <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>"; echo $msg; return false; } function EXC_HANDLER($exception){ ERR_HANDLER(0,$exception->getMessage(),$exception->getFile(),$exception->getLine()); } function shutDownFunction() { $error = error_get_last(); if ($error["type"] == 1) { ERR_HANDLER($error["type"],$error["message"],$error["file"],$error["line"]); } } set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED); register_shutdown_function("shutdownFunction"); set_exception_handler("EXC_HANDLER");
Просто пиши:
error_reporting(-1);
Лучшее / простое / быстрое решение, которое вы можете использовать, если это быстрая отладка, заключается в том, чтобы окружить ваш код захватывающими исключениями. Это то, что я делаю, когда хочу что-то быстро проверить на производстве.
try { //Page code } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; }
Надеюсь, это поможет.
Вот что я узнал. В файле PHP.INI
error_reporting = E_ALL display_errors = On
Этот код сверху должен работать error_reporting (E_ALL);
Однако попытайтесь отредактировать код на телефоне в файле
error_reporting = on
если у вас установлен xdebug, вы можете отменить все настройки, установив:
xdebug.force_display_errors = 1; xdebug.force_error_reporting = -1;
force_display_errors
Тип: int, значение по умолчанию: 0, введено в Xdebug> = 2.3 Если этот параметр установлен в 1, тогда всегда будут отображаться ошибки, независимо от того, что такое настройка отображения display_errors PHP.
force_error_reporting
Тип: int, значение по умолчанию: 0, введено в Xdebug> = 2.3 Этот параметр является битовой маской, например error_reporting. Эта битовая маска будет логически ORed с битовой маской, представленной error_reporting, на dermine, где должны отображаться ошибки. Этот параметр можно сделать только в php.ini и позволяет принудительно отображать определенные ошибки независимо от того, что делает приложение с помощью ini_set ().