Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php AuthComponent在开发模式下工作得很好,但在生产环境中却不行?_Php_Cakephp - Fatal编程技术网

Php 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

我在使用CakePHP的AuthComponent时遇到了一个奇怪的错误。据我所知,代码本身没有任何问题。它在我的开发机器和生产服务器上运行得非常好。但是,如果我在生产服务器上将app/Core/config.php中的“debug”级别从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>

| 
| 

您可能有不同的
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文件夹存在问题,因此我已确保在部署到生产服务器时不会复制这些文件夹。