laravel 5显示服务器上的空白页面错误(没有laravel日志),使用hhvm和nginx运行


laravel 5 show blank page on server error (and no laravel log), running with hhvm and nginx

我跟随Fidelioper的帖子,一步一步地用hhvm运行laravel。有两个项目托管在我的服务器上,一个是我的博客,它是基于衣柜(laravel 4.1),另一个项目是laravel 5。

我的博客没有服务器错误和laravel日志文件的问题;但另一个项目无法创建日志文件,因此不会显示错误页面。

我仔细检查了storage文件夹权限。它是777

当我运行php artisan serve(原生php,而不是hhvm)并浏览到它时,会显示错误页面,并创建日志文件。所以我认为hhvm有问题。

如何修复使用hhvm运行laravel 5时出现错误的空白页?如何恢复错误页面(或欢呼页面)

附言我读过这样的相关问题,仍然有问题。

p.S.S.如果需要任何信息,请询问我,我会更新问题。

我在安装带有HHVM的Laravel Homestead时遇到了同样的问题。如果你在路由文件中输入一些随机垃圾,比如sdfkjl,你会得到一个空白页面(但是,如果添加分号sdfkjl;,你会收到错误输出)。错误记录在/var/log/hhvm/error.log中,但它们不会进入浏览器,相反,您只会得到一个空白页面。这似乎是HHVM的故意行为。Laravel似乎也试图处理这些问题,但没有抓住HHVM发送的一些致命一击。多亏了这个github问题的线索,我决定对Laravel的Foundation'Bootstrap'HandleExceptions.php进行一些细微的修改,看看我是否能让它抓住所有这些致命的东西:

首先,更新您的/etc/hhvm/php.ini并添加以下设置:

hhvm.server.implicit_flush = true
hhvm.error_handling.call_user_handler_on_fatals = true

在修改包源之前,让我们使用以下手工命令删除vendor'compiled.php

$ php artisan clear-compiled

让我们将环境评估设置为数组:

.env

SESSION_DRIVER=array

(您可能还需要清除存储/框架/会话中所有看起来随机的会话文件)

现在,我们对Laravel包源代码所做的任何更改都将立即反映出来。让我们更新HandleExceptions类中的一些内容:

vendor/laravel/framework/src/IIlluminate/Foundation/Bootstrap/HandleExceptions.php

// **** Add this to hold fatal error
protected static $fatalError = null;
...
public function handleError($level, $message, $file = '', $line = 0, $context = array())
{
   // **** Add this, loads fatal error
   if ($level & (1 << 24)) {
        self::$fatalError = array(
            'message' => $message,
            'type' => $level,
            'file' => $file,
            'line' => $line
        );
    }   
    if (error_reporting() & $level)
    {
        throw new ErrorException($message, 0, $level, $file, $line);
    }
} 
...   
// *** Update this function so it can handle the fatal
public function handleShutdown()
{
    $error = error_get_last();
    if(self::$fatalError){
        $error = self::$fatalError;
    }
    if ( ! is_null($error) && $this->isFatal($error['type']))
    {
        $this->handleException($this->fatalExceptionFromError($error, 0));
    }
}
...
protected function isFatal($type)
{
    // *** Add type 16777217 that HVVM returns for fatal
    return in_array($type, [16777217, E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR, E_PARSE]);
}
...

现在,在路由文件夹中键入随机垃圾(没有分号),你会看到致命的显示。我现在已经在Laravel github上向Taylor报告了这个问题。如果你在Lumen,我在这里有一个解决方案,它将一直有效,直到Lumen也得到修复。

我也遇到了同样的问题。授予755对整个laravel项目的权限,这对我来说是工作

无论如何,您可以检查hhvm错误日志,运行

$tail -n 50 -f /var/log/hhvm/error.log