Подтвердить что ты не робот

Ошибки анализа не отображаются

Я хочу, чтобы 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. ЛЮБЫЕ ИДЕИ НАРОДЫ?

4b9b3361

Ответ 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);