我在运行ubuntu 12.04 LTS,Nginx,php-cgi和Laravel v3.2.14的机器上安装了新的Laravel
我收到以下错误。
未处理的例外
消息: 未定义的索引:argv
位置: 第218行的DOCUMNET ROOT / laravel / core.php
编辑:
我通过在laravel // Error :: shutdown()中注释掉错误处理函数,设法得到一个更具描述性的错误;在DOCUMENT ROOT / laravel / laravel.php第50行
请注意,此行不会导致错误,它似乎只为代码注册处理程序。
这是错误:
未处理的例外
消息: 在使用会话之前必须设置驱动程序。
位置: 第109行的DOCUMENT ROOT / laravel / session.php
堆栈追踪:
这些是导致错误的代码块:
if (Config::get('session.driver') !== '')
{
Session::save();
}
在DOCUMENT ROOT / laravel / session.php中调用此函数
public static function __callStatic($method, $parameters)
{
return call_user_func_array(array(static::instance(), $method), $parameters);
}
$ method包含字符串'save',$ parameters是一个空数组。
答案 0 :(得分:1)
如果你使用的是php-cgi,Laravel认为cli正在访问它。
解决方法是修改DOCUMENT ROOT / laravel / request.php,如下所示:
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'));
}
在返回false之前检查$ _SERVER超级全局是否具有'argv'键允许cli在使用php-cgi时继续运行。
答案 1 :(得分:0)
受到你的回答的启发,这对我有用:
public static function cli()
{
if(array_key_exists('HTTP_HOST', $_SERVER)) return false;
return defined('STDIN') || (substr(PHP_SAPI, 0, 3) == 'cgi' && getenv('TERM'));
}