Я не могу быть уверен, что эта проблема частично связана с бродягой, однако у меня есть установка Yii 1.x в ящике Vagrant с 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
Больше подробностей,
Вы можете сделать некоторые дикие вещи с хорошим обработчиком выключения 🙂