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

一笑奈何 提交于 2019-12-23 00:29:31

问题


I followed 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), and another project with laravel 5.

My blog has no issue with server errors and laravel log file; But the other project cannot create log files, and it won't show error page because of that.

I double checked storage folder permission. It is 777.

When I run php artisan serve (native php, not hhvm) and browse to it, the error page showed up, and log file was created. So something is wrong with hhvm I think.

How can I fix blank page, when running laravel 5 with hhvm, and an error occurred? How can I bring back the error page (or whoops page)

P.S. I have read related question like this and still have the problem.

P.S.S. If any information needed ask me and I will update the question.


回答1:


I suffered the same problem when I installed Laravel Homestead with HHVM. If you enter some random junk like sdfkjl into your routes file you'll get a blank page (however, if add a semi-colon sdfkjl; you get error output). The errors are being logged at /var/log/hhvm/error.log but they don't go to the browser, instead you just get a blank page. It appears this is intentional behavior for HHVM. It also appears Laravel tries to handle these but doesn't catch some of the fatals sent by HHVM. Thanks to clues from this github issue I decided to make some slight changes to Laravel's Foundation\Bootstrap\HandleExceptions.php to see if I could get it to catch all of these fatals:

First, update your /etc/hhvm/php.ini and add these settings:

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

Before modifying a package source, let's remove the vendor\compiled.php with this artisan command:

$ php artisan clear-compiled

And let's set the environment sessons to array:

in your .env

SESSION_DRIVER=array

(You may also need to clear all the random-looking session files in storage/framework/sessions)

Now any changes we make to the Laravel package source will immediately reflect. Let's update a few things in the HandleExceptions class:

in 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]);
}

...

Now type the random junk (no semi-colon) in your routes folder and you'll see the fatal display. I have now reported this issue to Taylor on the Laravel github. If you are in Lumen, I've got a solution here that will work until Lumen gets fixed as well.




回答2:


I also got the same issue. Give 755 permission to entire laravel project it's work for me

anyway you can check hhvm error log, run

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


来源:https://stackoverflow.com/questions/29264326/laravel-5-show-blank-page-on-server-error-and-no-laravel-log-running-with-hhv

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!