Php AuthComponent在开发模式下工作得很好,但在生产环境中却不行?
我在使用CakePHP的AuthComponent时遇到了一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行得非常好。但是,如果我在生产服务器上将app/Core/config.php中的“debug”级别从2(开发)更改为0(生产),则该应用程序将失败,错误日志中只有以下内容: PHP致命错误:在第3行的/path/to/my/app/View/Elements/auth_status.ctp中找不到类“AuthComponent” 我检查了文件是否存在于Php AuthComponent在开发模式下工作得很好,但在生产环境中却不行?,php,cakephp,Php,Cakephp,我在使用CakePHP的AuthComponent时遇到了一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行得非常好。但是,如果我在生产服务器上将app/Core/config.php中的“debug”级别从2(开发)更改为0(生产),则该应用程序将失败,错误日志中只有以下内容: PHP致命错误:在第3行的/path/to/my/app/View/Elements/auth_status.ctp中找不到类“AuthComponent” 我检查了文件是否存在于lib
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>
|
|
您可能有不同的php.ini
设置
检查开发和生产服务器:
echo ini_get('include_path');
我认为这可能与我的工作有关。我的代码中的错误与AuthComponent(或Cake)完全无关 不幸的是,我不知道你的例子中的错误是什么——在我指出错误之前,我必须进行一些真正的调试
如果有人怀疑;我的错误是,我以数组的形式访问函数,而我的生产服务器运行的是PHP版本<5.4。我终于弄清了这个问题。在core.php中,缓存引擎使用一个名为$prefix的变量。如果该引擎是Memcache或APC,则必须对其进行更改,以避免与服务器上运行的任何其他Cake应用程序发生命名冲突。我的开发笔记本电脑使用文件缓存引擎,而生产服务器使用APC(以及后来的Memcached)。同一个Cake应用的旧版本正在该服务器上运行,并且未使用AuthComponent。一旦有人对该应用程序发出请求,另一个应用程序就会使用错误的缓存并抛出HTTP500错误,直到我清除缓存为止
将$prefix变量更改为应用程序特有的变量,问题就会消失。我也遇到了这个问题,结果我的问题是,我试图在bootstrap.php中加载一个插件,但没有安装它。元素中的代码是什么?我用代码编辑了我的问题,Cheers应用程序在您的appcontroller文件上方使用语句本身,或者您得到的$components声明都应该足够了。真奇怪。您所处的页面是否有错误?或者普通的200页?这可能不是问题的答案,但您不需要
parent::beforeFilter()代码>在您的appController中,因为它是父级。这是一个正常的200页,但它显示为断开的HTML-布局呈现了所有内容,直到AuthComponent::user()行并刚刚结束。绘图变厚-将其设置回生产模式可消除该问题。我不知道这会持续多久。我还没有确定解决方案,但是。这表明app/tmp/cache文件夹存在问题,因此我已确保在部署到生产服务器时不会复制这些文件夹。