отладка — Белый экран смерти — нет ошибок, отображаемых в среде PHP / Vagrant (Yii)

Я не могу быть уверен, что эта проблема частично связана с vagrant, однако у меня установлена ​​Yii 1.x в Vagrant box с Unix.

Я пытаюсь вызвать простую ошибку PHP, такую ​​как отсутствие точки с запятой в контроллере, хотя я на 100% уверен, что у меня возникла ошибка, я не вижу стандартной страницы ошибок Yii с трассировкой стека. Это работало ранее, хотя, казалось бы, что-то недавнее прекратило эту работу таким образом.

Странно то, что Yii выводит запросы к базе данных внизу скрипта (это предназначено, но я не могу понять, почему Yii показывает только запросы к базе данных.

Мой личный конфиг выглядит следующим образом: (показывает только его часть ..)

Я пробовал код ниже & проверь логи но радости нет

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

Может кто-нибудь предложить какие-либо идеи …

return array(
'yiiDebug'      => true,
'yiiTraceLevel' => 6,
.....'components'=>array(
'log' => array(
'class'  => 'CLogRouter',
'routes' => array(
'web'  => array(
'class'         => 'CWebLogRoute',
'levels'        => 'profile, trace, info, error, warning, application', // profile, trace, info, error, warning, application
'showInFireBug' => false
),
'file' => array(
'class'      => 'CFileLogRoute',
'levels'     => 'error, warning, watch', // error, warning, watch
'categories' => 'system.*',
),
array(
'class'       => 'CProfileLogRoute',
'levels'  => 'error, warning, trace, info, profile', // error, warning, trace, info, profile
),
),
),
),

Так, например … в одном из моих контроллеров у меня есть следующий код:

public function actionDelete($id)
{
$model = $this->loadModel($id);
5e55 // added error here on purpose
}

Я ожидал бы ошибку во 2-й строке в отношении 5e55, которой нет места, но вместо того, чтобы получить ошибку, я вижу только белый экран (плюс журнал приложений Yii, который показывает все запросы и т. Д.) — если я удалить конфигурационные данные yii для вывода запросов Я получаю 100% белый / пустой экран.

Я попытался добавить различные вещи в файл начальной загрузки index.php, но без какой-либо радости мой конфиг выглядит относительно нормально, но я не могу понять, почему ошибка сообщается в браузер или мои журналы.

3

Решение

Вы правильно сделали, установив

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

…но есть несколько причин, по которым это может не вступить в силу.

1) Сообщение об ошибке может быть снова отключено чем-то «позже» в скрипте. Поскольку эти настройки в основном являются глобальными переменными, их может установить каждый, и большинство фреймворков где-то отключены. В зависимости от того, где ваш код «включен», что-то еще в цепочке вполне могло бы вызвать display_errors — false.

2) Изменение настроек может быть отключено во время выполнения. В вашей среде могут быть что-то вроде директив php_admin_flag, чтобы предотвратить включение display_errors.

Если вы вообще можете получить вывод, попробуйте запустить это, чтобы вывести состояние всех настроек ini:

var_dump(ini_get_all());

НО, что я думаю, вероятно, происходит если у вас есть небольшая синтаксическая ошибка в одном из ваших собственных файлов, и интерпретатор полностью отказывается от этого кода. Он никогда не выполняется, и поэтому настройка display_errors даже не запускается.

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

Еще один хакерский, но полезный способ — попытаться выполнить ваши файлы в командной строке и посмотреть, дает ли он синтаксическое предупреждение. Я не знаком с Yii, но найдите файлы, которые вы редактировали недавно, и запустите это:

php -f yourproject/somefile_ofyours.php

Вероятно, он выдаст ошибку, подобную этой:

PHP Parse error:  syntax error, unexpected 'xxxxx' (T_STRING) in somefile_ofyours.php on line 27
5

Другие решения

У вас есть файл журнала ошибок php, установленный в php.ini? Содержит ли это что-нибудь?
Вы пытались форсировать режим отладки yii через php?

  define( 'YII_DEBUG', true );

другие главные идеи:

  • включить вывод html ошибок и предупреждений
  • Посмотрите в phpinfo, что вы используете правильный php.ini и что отчеты об ошибках не зависят от того, что вы установили.
  • проверьте журнал ошибок apache
  • какова ценность $_SERVER['APPLICATION_ENV'] ?
1

Прежде всего…
Вы можете проверить правила, что текущий пользователь может просматривать страницу с ошибкой.

public function accessRules()
{
return array(array('allow',
'actions' => array('index', 'view', 'error'),
'users' => array('@')),
}

А также проверьте.

public function actionError()
{
if($error=Yii::app()->errorHandler->error)
{
if(Yii::app()->request->isAjaxRequest)
echo $error['message'];
else
$this->render('error', $error);
}
}

Когда ошибка передается компоненту приложения CErrorHandler, он выбирает подходящее представление для отображения ошибки.
это Ссылка на сайт может помочь

protected function resolveErrorMessage($rule)
{
if($rule->message!==null)
return $rule->message;
elseif($this->message!==null)
return $this->message;
else
return Yii::t('yii','You are not authorized to perform this action.');
}
  • Разрешает сообщение об ошибке для отображения.
  • Этот метод проверяет {@link message} и {@link CAccessRule :: message}, чтобы увидеть
  • какое сообщение об ошибке должно отображаться.
  • @param CAccessRule $ rule правило доступа
  • @ возвращаем строку сообщения об ошибке

Источник: Ссылка на сайт

1

Проверьте свои файлы журнала ошибок и опубликуйте ошибки здесь. Это может помочь решить ваши проблемы.

Также убедитесь, что ниже настройки в PHP.ini

; Report All Errors
error_reporting = E_ALL

; Display Errors
display_errors = On
0

Регистрация обработчика выключения также может быть очень полезна в этих ситуациях.

увидеть

http://php.net/manual/en/function.register-shutdown-function.php

Больше подробностей,

Кстати, вы можете сделать некоторые дикие вещи с хорошим обработчиком выключения 🙂

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector