2014-10-17 3 views
3

Я не могу быть уверен, что эта проблема частично связана с бродягой, однако у меня есть установка Yii 1.x в ящике Vagrant с Unix.Белый экран смерти - никаких ошибок в среде PHP/Vagrant (Yii)

Я пытаюсь заставить простую ошибку 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, но без какой-либо радости моя конфигурация выглядит относительно нормально, но я не понимаю, почему сообщение об ошибке сообщается в браузере или в моих журналах.

ответ

5

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

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

... но есть несколько причин, почему это не может на самом деле вступают в силу.

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

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

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

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 
+1

приказывает поточный метод позволил мне наконец-то см. стандартную ошибку синтаксического анализа PHP! :) Теперь просто чтобы выяснить, почему ошибка не отображается непосредственно в браузере .... но это становится немного ближе спасибо – Zabs

+0

Есть ли причина, почему парсер PHP в командной строке будет показывать ошибку но ТОЧНАЯ та же страница, если смотреть в браузере, не будет ??? В любом случае я приближаюсь :) – Zabs

+0

Да. Версия php для командной строки cmd получает разные настройки для той, которая работает как часть вашего веб-сервера (mod_php или что-то еще). Либо потому, что у них разные файлы php.ini, либо потому, что веб-версия получает настройки, измененные во время выполнения. – Jagu

0

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

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

; Report All Errors 
error_reporting = E_ALL 

; Display Errors 
display_errors = On 
1

У вас есть РНР ошибки лог-файл, установленный в 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, он выбирает соответствующее представление для отображения ошибки. Это Link может помочь

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 $ исключает правило доступа
  • @return строковое сообщение об ошибке

Источник: Link

0

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

см

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

для получения более подробной информации,

К вами могут сделать некоторые дикие вещи с хорошим обработчиком выключения :)

Смежные вопросы