Intereting Posts
Изменено PDO :: ATTR_EMULATE_PREPARES на FALSE и появляется ошибка «Недопустимый номер параметра» Как отображать японские символы на странице php? Как запускать php-скрипт ежедневно? Использование usort в php для сортировки массива объектов? Считать элементы по условию с помощью XML и PHP? Защищенные страницы с PHP / .htaccess? Как изменить временную метку по умолчанию, которую использует PHP для входа в файл? Нужно руководство для начала с Zend ACL Как я могу получить доступ к нескольким индивидуальным ответам reCAPTCHA с одной и той же страницы? Проверьте, существует ли имя пользователя в таблице mysql через php? Автоматическое определение формата изображения в PHP PHP, когда заголовок цикла и таблицы отображается только в том случае, если установлено значение db как показать результаты, пока скрипт php все еще запущен Страница входа выглядит как не перенаправление на следующую страницу, как я могу это исправить? Задержка после загрузки больших файлов с загрузчиком JQuery BlueImp

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

Я не могу быть уверен, что эта проблема частично связана с бродягой, однако у меня есть установка 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 ); 

другие идеи верхней части головы:

  • включить html-вывод ошибок и предупреждений
  • см. в phpinfo, что вы используете правильный php.ini, и эта отчетность об ошибках не зависит от того, к чему вы ее установили.
  • проверить журнал ошибок apache
  • каково значение $_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.'); } 
  • Разрешает выводить сообщение об ошибке.
  • Этот метод проверит {@link message} и {@link CAccessRule :: message}, чтобы увидеть
  • какое сообщение об ошибке должно отображаться.
  • @param CAccessRule $ rule правило доступа
  • @return вывести сообщение об ошибке

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

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

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

 ; Report All Errors error_reporting = E_ALL ; Display Errors display_errors = On 

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

видеть

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

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

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