0

我在运行 ubuntu 12.04 LTS、Nginx、php-cgi 和 Laravel v3.2.14 的机器上新安装了 Laravel

我收到以下错误。

未处理的异常

消息: 未定义的索引:argv

位置: DOCUMNET ROOT/laravel/core.php 第 218 行

编辑:

通过注释掉 laravel //Error::shutdown(); 中的错误处理函数,我设法得到了一个更具描述性的错误。在 DOCUMENT ROOT/laravel/laravel.php 第 50 行

请注意,此行不会导致错误,它似乎只是为发生错误的代码注册了一个处理程序。

这是错误:

未处理的异常

消息: 必须在使用会话之前设置驱动程序。

位置: 第 109 行的 DOCUMENT ROOT/laravel/session.php

堆栈跟踪:

  1. 文档根目录/laravel/session.php(150): Laravel\Session::instance()
  2. 文档根目录/laravel/laravel.php(195): Laravel\Session::__callStatic('save', Array)
  3. 文档根目录/laravel/laravel.php(195): Laravel\Session::save()
  4. DOCUMENT ROOT/public/index.php(34): require('/mona/developme...')
  5. {主要的}

这些是导致错误的代码块:

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 是一个空数组。

4

2 回答 2

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 时继续运行。

于 2013-03-28T04:29:24.653 回答
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'));
}
于 2013-04-13T20:47:30.540 回答