Ошибки разбора не отображаются - PullRequest
21 голосов
/ 03 июня 2009

Я хочу, чтобы PHP отображал ошибки разбора на экране. Вместо этого я получаю пустую страницу. Ничего не записывается в файл журнала ошибок сервера.

Моя настройка: PHP5.2.9 / IIS 6 (не Apache!).

Мой PHP.INI:

error_reporting=E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On
error_log = "C:\Program Files\Zend\ZendServer\logs\php_error.log"

Как сделать так, чтобы логические или неустранимые ошибки регистрировались или отображались на экране?

Спасибо, Темури

ОБНОВЛЕНИЕ : После игры с различными переключателями это выглядит как проблема IIS. ЛЮБЫЕ ИДЕИ ЛЮДИ?

Ответы [ 8 ]

15 голосов
/ 03 июня 2009

Установка уровня ошибки в самом файле php не решает проблему здесь, потому что сам файл не может быть проанализирован !!

Вам нужно изменить строку error_reporting в вашем php.ini следующим образом:

error_reporting = E_ALL

Кстати: в файле php.ini есть несколько примеров того, что делать, чтобы отобразить, какой тип сообщений об ошибках.

Удачи,

mcemoz

4 голосов
/ 03 июня 2009

Apache также не всегда любит сообщать об ошибках синтаксического анализа. Из командной строки запустите

php -l <file>

Ключ -l указывает PHP проверять синтаксис файла. Смотрите справочную страницу.

3 голосов
/ 03 июня 2009

E_STRICT не включено в E_ALL (до PHP 6). Если вы хотите продолжать получать E_STRICT

В php.ini:

error_reporting = E_ALL | E_STRICT

Во время выполнения:

error_reporting( E_ALL | E_STRICT );

Вам потребуется установить уровень сообщений об ошибках (и display_errors ) в php.ini, чтобы увидеть синтаксические ошибки. Если PHP встречает синтаксическую ошибку, среда выполнения не выполняется, поэтому настройка во время выполнения не будет работать. (См. Ссылку display_errors.)

2 голосов
/ 02 января 2012

Вы можете проверить синтаксис скрипта с помощью этой команды в терминале:

php -l path/to/file.php

Лично я добавил эту строку в свой файл ~/.bash_profile, чтобы я мог легко запустить php -l для всех файлов в текущем рабочем каталоге:

phpl() { for i in *.php; do php -l $i; done }

Если вы действительно хардкор, вы даже можете запустить свое приложение из командной строки. У вас будет гораздо больше шансов увидеть ошибки во время компиляции, и это просто круто.

Вы можете использовать переменную $ argv, чтобы получить первый аргумент, $ argv [1], а затем использовать его в качестве запроса.

<?php
// show those errors!
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

// simulate a web server request
$request = '/' . isset($argv[1]) ? ltrim($argv[1], '/') : '/';
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = $request;

Затем вы можете запустить свой скрипт из командной строки. Это будет эквивалентно посещению: your-webapp.com / запрос / URI / здесь

php /path/to/script.php request/uri/here

Вот более подробный пример запуска CodeIgniter через командную строку. Это должно работать и для многих других фреймворков: http://phpstarter.net/2008/12/run-codeigniter-from-the-command-line-ssh/

1 голос
/ 20 августа 2012

Как говорит Расмус Лердорф, всегда используйте error_reporting (-1) на сервере разработки.

0 голосов
/ 08 августа 2014

Если вы используете Zend Framework (v1) и используете автозагрузчик, следующий код предотвратит отображение ошибок разбора:

self::$Autoloader->suppressNotFoundWarnings(true);

См. Следующий ответ для получения более подробной информации:

Отображение ошибок php при использовании Zend Framework

0 голосов
/ 04 июня 2014

Re: пустой экран php death death, я обнаружил, что настройка

php_value error_reporting "E_ALL" или php_value error_reporting 8192

в .htaccess на моем Windows 7, Wampserver с / apache 2.2.4 и php 5.3.13 - верные способы получить пустой экран ошибок php - сегодня, 3 июня 2014 года. Эти строки htaccess ДОЛЖНЫ установить значение желаний в phpinfo (), но отображение ошибок происходит только тогда, когда строка закомментирована (не используется) в htaccess.

НО ... в следующую минуту я обнаружу, что

php_value error_reporting 8191

Устанавливает значение phpinfo () И также позволяет отображать сообщения об ошибках в браузере! D'о! Это должно быть целое число, а также, по-видимому, конкретное или допустимое целое число, а не просто достаточно большое целое число!

0 голосов
/ 03 июня 2009

Попробуйте это.

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