laravel 5 在服务器错误上显示空白页(并且没有 laravel 日志),运行 hhvm 和 nginx
laravel 5 show blank page on server error (and no laravel log), running with hhvm and nginx
我关注了 Fideloper post about running laravel
with hhvm, step by step. There are two projects hosted on my server, one is my blog which is based on wardrobe (laravel 4.1),还有另一个项目 laravel 5。
我的博客没有服务器错误和 laravel 日志文件的问题;但是另一个项目无法创建日志文件,因此不会显示错误页面。
我仔细检查了 storage
文件夹权限。是 777
.
当我 运行 php artisan serve
(本机 php,而不是 hhvm)并浏览到它时,出现了错误页面,并创建了日志文件。所以我认为 hhvm 有问题。
当运行宁laravel 5
与hhvm
发生错误时,如何修复空白页?我怎样才能恢复错误页面(或糟糕页面)
P.S. 我已经阅读了 this 等相关问题,但问题仍然存在。
P.S.S. 如果需要任何信息,请问我,我会更新问题。
我也遇到了同样的问题。授予 755
对整个 laravel 项目的权限它对我有用
无论如何你可以检查 hhvm 错误日志,运行
$tail -n 50 -f /var/log/hhvm/error.log
我用 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
然后将环境会话设置为数组:
在你的 .env
SESSION_DRIVER=array
(您可能还需要清除 storage/framework/sessions 中所有看似随机的会话文件)
现在我们对 Laravel 包源所做的任何更改都会立即反映出来。让我们更新 HandleExceptions class:
中的一些内容
在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]);
}
...
现在在您的路线文件夹中键入随机垃圾(无分号),您将看到致命的显示。我现在 reported this issue to Taylor on the Laravel github. If you are in Lumen, I've got a solution here 在 Lumen 也得到修复之前可以正常工作。
我关注了 Fideloper post about running laravel
with hhvm, step by step. There are two projects hosted on my server, one is my blog which is based on wardrobe (laravel 4.1),还有另一个项目 laravel 5。
我的博客没有服务器错误和 laravel 日志文件的问题;但是另一个项目无法创建日志文件,因此不会显示错误页面。
我仔细检查了 storage
文件夹权限。是 777
.
当我 运行 php artisan serve
(本机 php,而不是 hhvm)并浏览到它时,出现了错误页面,并创建了日志文件。所以我认为 hhvm 有问题。
当运行宁laravel 5
与hhvm
发生错误时,如何修复空白页?我怎样才能恢复错误页面(或糟糕页面)
P.S. 我已经阅读了 this 等相关问题,但问题仍然存在。
P.S.S. 如果需要任何信息,请问我,我会更新问题。
我也遇到了同样的问题。授予 755
对整个 laravel 项目的权限它对我有用
无论如何你可以检查 hhvm 错误日志,运行
$tail -n 50 -f /var/log/hhvm/error.log
我用 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
然后将环境会话设置为数组:
在你的 .env
SESSION_DRIVER=array
(您可能还需要清除 storage/framework/sessions 中所有看似随机的会话文件)
现在我们对 Laravel 包源所做的任何更改都会立即反映出来。让我们更新 HandleExceptions class:
中的一些内容在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]);
}
...
现在在您的路线文件夹中键入随机垃圾(无分号),您将看到致命的显示。我现在 reported this issue to Taylor on the Laravel github. If you are in Lumen, I've got a solution here 在 Lumen 也得到修复之前可以正常工作。