laravel 5显示服务器错误的空白页(并且没有laravel日志),与hhvm和nginx一起运行

时间:2015-03-25 19:02:57

标签: php laravel nginx laravel-5 hhvm

我跟着Fideloper post关于使用hhvm一步一步地运行laravel。我的服务器上托管了两个项目,一个是基于wardrobe(laravel 4.1)的博客,另一个是基于laravel 5的项目。

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

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

当我运行php artisan serve(本机php,而不是hhvm)并浏览到它时,出现错误页面,并创建了日志文件。所以我认为hhvm有问题。

如何使用laravel 5运行hhvm并发生错误,如何修复空白页?如何恢复错误页面(或呐喊页面)

P.S。我已阅读this之类的相关问题但仍有问题。

P.S.S。如果有任何需要的信息问我,我会更新问题。

2 个答案:

答案 0 :(得分:3)

当我使用HHVM安装Laravel Homestead时遇到了同样的问题。如果在路径文件中输入一些随机垃圾如sdfkjl,则会得到一个空白页面(但是,如果添加一个分号sdfkjl;,则会得到错误输出)。错误记录在/var/log/hhvm/error.log,但它们不会转到浏览器,而只是获得一个空白页面。看来这是HHVM的故意行为。 Laravel也试图处理这些问题,但没有发现HHVM发送的一些致命事件。感谢来自this github issue的线索,我决定对Laravel的Foundation\Bootstrap\HandleExceptions.php进行一些细微的修改,看看我能不能抓住所有这些致命因素:

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

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

在修改包源之前,让我们使用这个artisan命令删除vendor\compiled.php

$ php artisan clear-compiled

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

.env

中的

SESSION_DRIVER=array

(您可能还需要清除 storage / framework / sessions 中的所有随机会话文件)

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

vendor / laravel / framework / src / Illuminate / 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上向泰勒reported this issue了。如果你在Lumen,我会得到solution here,直到Lumen也被修复。

答案 1 :(得分:-1)

我也遇到了同样的问题。授予755整个laravel项目的权限,这对我有用

无论如何你可以查看hhvm错误日志,运行

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