3

使用 CakePHP 的 AuthComponent 时出现一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行良好。但是,如果我在生产服务器上将 app/Core/config.php 中的“调试”级别从 2(开发)更改为 0(生产),则应用程序将失败,但错误日志中只有以下内容:

PHP 致命错误:在第 3 行的 /path/to/my/app/View/Elements/auth_status.ctp 中找不到类 'AuthComponent'

我已检查该文件是否存在于lib/Cake/Controller/Component/AuthComponent.php. 我还实验性地添加/删除App::uses('AuthComponent', 'Controller/Component')了 AppController 和我的个人控制器,但无济于事。这让我很困惑,我无法在我的开发机器上重现该错误。这似乎表明存在服务器问题,但我找不到解释,并且文档不清楚运行 AuthComponent 所需的先决条件。有什么想法可以解决吗?谢谢!

作为参考,这是我的 AppController:

class AppController extends Controller {
  public $helpers = array('Recaptcha.Recaptcha');
  public $components = array(
    'Session',
    'Auth' => array(
        'loginAction' => array(
            'controller' => 'users',
            'action' => 'login'
        ),
        'authenticate' => array(
            'Form' => array(
                'fields' => array('username' => 'email')
            )
        )
    )
  );

  public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow();
  }
}

auth_status.ctp 的代码:

        <div class="pull-right">
        <?php if (AuthComponent::user('id')): ?>
            <?php echo $this->Html->link("Welcome!", '/users/view/'.AuthComponent::user('id'));?>
             | 
            <?php echo $this->Html->link('Logout', '/users/logout');?>
        <?php else: ?>
            <?php echo $this->Html->link('Login', '/users/login');?>
             | 
            <?php echo $this->Html->link('Register', '/users/register');?>
        <?php endif; ?>
        </div>
4

4 回答 4

3

我终于明白了这一点。在 core.php 中,缓存引擎使用了一个名为 $prefix 的变量。如果该引擎是 Memcache 或 APC,则必须对其进行更改以避免与服务器上运行的任何其他 Cake 应用程序发生命名冲突。我的开发笔记本电脑使用的是文件缓存引擎,而生产服务器使用的是 APC(以及后来的 Memcached)。同一 Cake 应用程序的旧版本正在该服务器上运行,并且使用 AuthComponent。只要有人对该应用程序发出请求,另一个应用程序就会使用错误的缓存并抛出 HTTP500 错误,直到我清除缓存为止。

将 $prefix 变量更改为您的应用程序独有的变量,问题就消失了。

于 2013-02-09T23:45:41.300 回答
0

您可能php.iniinclude_path.

检查开发和生产服务器:

echo ini_get('include_path');
于 2013-01-07T10:00:31.707 回答
0

我想这可能与这个问题有关。我的代码中的错误与 AuthComponent(或 Cake)完全无关。

不幸的是,我不知道你的错误是什么——在我指出我的错误之前,我必须进行一些真正的调试。

如果有人想知道;我的错误是我将函数作为数组访问,而我的生产服务器运行的 PHP 版本 < 5.4。

于 2013-01-28T00:16:33.270 回答
0

我也遇到了这个问题,事实证明我的问题是,我试图在 bootstrap.php 中加载一个插件,但没有安装它

于 2016-07-15T21:55:28.400 回答