我跟随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的FoundationBootstrapHandleExceptions.php
进行一些细微的修改,看看我是否能让它抓住所有这些致命的东西:
首先,更新您的/etc/hhvm/php.ini
并添加以下设置:
hhvm.server.implicit_flush = true
hhvm.error_handling.call_user_handler_on_fatals = true
在修改包源之前,让我们使用以下手工命令删除vendorcompiled.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