Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
死亡白屏-PHP/Vagrant环境(Yii)内无错误显示_Php_Debugging_Yii_Error Handling_Vagrant - Fatal编程技术网

死亡白屏-PHP/Vagrant环境(Yii)内无错误显示

死亡白屏-PHP/Vagrant环境(Yii)内无错误显示,php,debugging,yii,error-handling,vagrant,Php,Debugging,Yii,Error Handling,Vagrant,我不能确定这个问题是否部分是由vagrant造成的,但是我在运行Unix的vagrant box中安装了一个Yii 1.x 我试图强制执行一个简单的PHP错误,例如控制器中缺少分号,尽管我100%确定我创建了一个错误,但我没有看到带有堆栈跟踪的标准Yii错误页面。这在以前是有效的,尽管最近的一些事情似乎以这种方式停止了这项工作 奇怪的是-Yii在脚本的底部输出数据库查询(这是有意的,但我无法理解为什么Yii只显示DB查询) 我的个人配置如下所示:(仅显示部分内容) 我尝试了下面的代码&检查日志,

我不能确定这个问题是否部分是由vagrant造成的,但是我在运行Unix的vagrant box中安装了一个Yii 1.x

我试图强制执行一个简单的PHP错误,例如控制器中缺少分号,尽管我100%确定我创建了一个错误,但我没有看到带有堆栈跟踪的标准Yii错误页面。这在以前是有效的,尽管最近的一些事情似乎以这种方式停止了这项工作

奇怪的是-Yii在脚本的底部输出数据库查询(这是有意的,但我无法理解为什么Yii只显示DB查询)

我的个人配置如下所示:(仅显示部分内容)

我尝试了下面的代码&检查日志,但没有乐趣

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
}
我预计第二行的5e55会出现一个错误,但我看到的不是错误,而是一个白色屏幕(加上显示所有查询的Yii应用程序日志等)-如果我删除Yii配置以输出查询,我会得到一个100%的白色/空白屏幕


我曾尝试向index.php引导文件添加各种内容,但没有任何乐趣,我的配置看起来相对正常,但我无法理解为什么会向浏览器或日志报告错误。

检查错误日志文件并在此处发布错误。这可能有助于解决您的问题

还要确保在
PHP.ini中有以下设置

; Report All Errors
error_reporting = E_ALL

; Display Errors
display_errors = On

您是否在php.ini中设置了php错误日志文件?它是否包含任何内容? 您是否尝试通过php强制使用yii调试模式

  define( 'YII_DEBUG', true );
其他最重要的想法:

  • 启用错误和警告的html输出
  • 在phpinfo中可以看到您使用的是正确的php.ini,并且错误报告是您设置的
  • 检查apache的错误日志
  • $\u SERVER['APPLICATION\u ENV']
    的值是多少

    • 通过设置

      ini_set('display_errors',true);
      error_reporting(E_ALL);
      
      …但有几个原因说明这可能不会真正生效

      1) 脚本中的“稍后”内容可能会再次关闭错误报告。因为这些设置基本上只是全局变量,任何人都可以设置它们,而且大多数框架都有禁用它们的地方。根据代码“包含”的位置,链中的其他内容可能会称为display_errors-false

      2) 可以在运行时禁用更改设置。您的环境可能有类似php_admin_标志的指令,用于停止打开显示错误

      如果您能够获得任何输出,请尝试运行此命令以转储所有ini设置的状态:

      var_dump(ini_get_all());
      
      但我认为可能发生的是,您自己的一个文件中有一个小语法错误,而解释器完全放弃了该代码。它从未执行过,因此您的“显示错误”设置甚至无法运行

      正如其他人所建议的,查看错误日志可能会告诉您发生了什么

      另一个有技巧但有用的方法是尝试在命令行上执行文件,看看它是否给出语法警告。我不熟悉Yii,但找到您最近编辑的文件并运行以下操作:

      php -f yourproject/somefile_ofyours.php
      
      它可能会抛出如下错误:

      PHP Parse error:  syntax error, unexpected 'xxxxx' (T_STRING) in somefile_ofyours.php on line 27
      
      首先。。。 您可以检查规则,确保允许当前用户查看错误页面

      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访问规则
      • @返回错误消息的字符串

      来源:

      在这些情况下,注册关机处理程序也会有很大的好处

      欲知详情,


      顺便说一句,你可以用一个好的关机处理程序做一些疯狂的事情:)

      这个命令行方法让我终于看到了标准的PHP解析错误:)现在,我想知道为什么错误不会直接出现在浏览器中。。。。但是这一点越来越接近了,为什么命令行上的PHP解析器会显示错误,但在浏览器中查看完全相同的页面时却不会显示??不管怎样,我都越来越近了:)是的。php的cmd行版本与作为web服务器一部分运行的版本(mod_php或其他)有不同的设置。要么是因为它们有不同的php.ini文件,要么是因为web版本在运行时更改了设置。谢谢-还没有找到解决方案,但您提供的解决方案为我提供了一个暂时的解决方案。我可以为“php-f”再提供+100吗?