Ошибки анализа не отображаются
Я хочу, чтобы 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. ЛЮБЫЕ ИДЕИ НАРОДЫ?
Ответы
Ответ 1
Установка уровня ошибки в самом php файле не решает проблему здесь, потому что сам файл не может быть проанализирован!!
Вам нужно изменить строку error_reporting в php.ini следующим образом:
error_reporting = E_ALL
BTW: В файле php.ini есть несколько примеров того, что делать, чтобы отображать типы сообщений об ошибках.
Удачи,
mcemoz
Ответ 2
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
.)
Ответ 3
Apache не всегда хочет сообщать об ошибках синтаксического анализа. В командной строке запустите
php -l <file>
Переключатель -l указывает PHP на проверку синтаксиса файла. См. Справочную страницу.
Ответ 4
Вы можете проверить синтаксис script с помощью этой команды в терминале:
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;
Затем вы можете запустить script через командную строку. Это будет эквивалент посещения:
your-webapp.com/request/uri/here
php /path/to/script.php request/uri/here
Вот более подробный пример для запуска CodeIgniter через командную строку. Он должен работать и для многих других фреймворков: http://phpstarter.net/2008/12/run-codeigniter-from-the-command-line-ssh/
Ответ 5
Как предлагает Rasmus Lerdorf, всегда используйте error_reporting (-1) на сервере разработки.
Ответ 6
Re: Пустой экран смерти смерти php, я обнаружил, что установка
php_value error_reporting "E_ALL" или
php_value error_reporting 8192
в .htaccess на моем Windows 7, Wampserver w/apache 2.2.4 и php 5.3.13 - это надежные способы получить пустой экран ошибки php - сегодня, 3 июня 2014. Эти строки htaccess DO устанавливают значение желания в phpinfo(), но отображение ошибок происходит только тогда, когда строка закомментирована (не используется) в htaccess.
НО... В следующую минуту я обнаруживаю, что
php_value error_reporting 8191
Устанавливает значение phpinfo() И также позволяет отображать сообщения об ошибках в браузере! D'о! Это должно быть целое число, а также, по-видимому, определенное или действительное целое число, а не просто достаточно большое целое число!
Ответ 7
Если вы используете Zend Framework (v1) и используете Autoloader, следующий код предотвратит отображение ошибок анализа:
self::$Autoloader->suppressNotFoundWarnings(true);
Для получения дополнительной информации см. следующий ответ:
Отображать ошибки php при использовании среды Zend
Ответ 8
Попробуйте это.
error_reporting(E_ALL);
ini_set("display_errors", 1);