Search code examples
laravellaravel-3

laravel-3 core exception on new installation


I have a new installation of Laravel on a machine running ubuntu 12.04 LTS, Nginx, php-cgi, and Laravel v3.2.14

I am getting the following error.

Unhandled Exception

Message: Undefined index: argv

Location: DOCUMNET ROOT/laravel/core.php on line 218

EDIT:

I have managed to get a slightly more descriptive error by commenting out the error handling function in laravel //Error::shutdown(); on line 50 of DOCUMENT ROOT/laravel/laravel.php

Note that this line does not cause the error, it only seems to register a handler for the code that does.

Here is the error:

Unhandled Exception

Message: A driver must be set before using the session.

Location: DOCUMENT ROOT/laravel/session.php on line 109

Stack Trace:

  1. DOCUMENT ROOT/laravel/session.php(150): Laravel\Session::instance()
  2. DOCUMENT ROOT/laravel/laravel.php(195): Laravel\Session::__callStatic('save', Array)
  3. DOCUMENT ROOT/laravel/laravel.php(195): Laravel\Session::save()
  4. DOCUMENT ROOT/public/index.php(34): require('/mona/developme...')
  5. {main}

These are the code blocks causing the error:

if (Config::get('session.driver') !== '')
{
    Session::save();
}

Which calls this function in DOCUMENT ROOT/laravel/session.php

public static function __callStatic($method, $parameters)
{
    return call_user_func_array(array(static::instance(), $method), $parameters);
}

$method contains the string 'save', and $parameters is an empty array.


Solution

  • Laravel thinks that it is being accessed by cli if you are using php-cgi.

    The solution is Modifying DOCUMENT ROOT/laravel/request.php like this:

    public static function cli()
    {
        // This is a hack to make laravel work with fast-cgi
        // Added by David - 03/27/13
        if(!array_key_exists('argv', $_SERVER)) return false;
    
        return defined('STDIN') || (substr(PHP_SAPI, 0, 3) == 'cgi' && getenv('TERM'));
    
    }
    

    Checking if the $_SERVER super global has the 'argv' key before returning false permits cli to continue to function while using php-cgi.