Я не могу быть уверен, что эта проблема частично связана с 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, но без какой-либо радости мой конфиг выглядит относительно нормально, но я не могу понять, почему ошибка сообщается в браузер или мои журналы.
Вы правильно сделали, установив
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
У вас есть файл журнала ошибок php, установленный в php.ini? Содержит ли это что-нибудь?
Вы пытались форсировать режим отладки yii через php?
define( 'YII_DEBUG', true );
другие главные идеи:
$_SERVER['APPLICATION_ENV']
?Прежде всего…
Вы можете проверить правила, что текущий пользователь может просматривать страницу с ошибкой.
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.');
}
Источник: Ссылка на сайт
Проверьте свои файлы журнала ошибок и опубликуйте ошибки здесь. Это может помочь решить ваши проблемы.
Также убедитесь, что ниже настройки в PHP.ini
; Report All Errors
error_reporting = E_ALL
; Display Errors
display_errors = On
Регистрация обработчика выключения также может быть очень полезна в этих ситуациях.
увидеть
http://php.net/manual/en/function.register-shutdown-function.php
Больше подробностей,
Кстати, вы можете сделать некоторые дикие вещи с хорошим обработчиком выключения 🙂