【问题标题】:laravel 5 show blank page on server error (and no laravel log), running with hhvm and nginxlaravel 5 在服务器错误上显示空白页面(并且没有 laravel 日志),使用 hhvm 和 nginx 运行
【发布时间】:2018-06-09 03:53:54
【问题描述】:

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

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

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

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

当运行laravel 5hhvm 时出现错误,如何修复空白页?如何恢复错误页面(或糟糕页面)

P.S. 我已经阅读了类似this 的相关问题,但问题仍然存在。

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

【问题讨论】:

  • Server Fault 上问这个问题可能会更好,这是系统管理问题。
  • 一些语法修复。我认为 OP 需要澄清寻求什么样的帮助。
  • @tinlyx 谢谢你的修复,我已经更新了我的问题。
  • HHVM(不幸的是)将致命错误记录到/var/log/hhvm/error.log
  • 我知道发生了什么:stackoverflow.com/questions/29789945/…

标签: php laravel nginx laravel-5 hhvm


【解决方案1】:

我在使用 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

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

$ php artisan clear-compiled

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

在你的 .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 给 Taylor。如果你在 Lumen,我有一个 solution here,它可以在 Lumen 得到修复之前工作。

【讨论】:

  • 非常感谢!浏览了整个网站后,将调试提升到了一个新的水平
【解决方案2】:

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

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

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

【讨论】:

  • 777 一切都是危险和不必要的。有很多更好的方法来设置权限。
  • @ceejayoz 抱歉,不是 777,应该是 755,可以吗?
  • 您最好使用 ACL 或 chown 来允许网络服务器写入 storage 目录。
猜你喜欢
  • 2017-09-05
  • 2018-04-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-06-25
  • 2016-04-25
相关资源
最近更新 更多