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.phpApp::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

これはこの問題に関連しているのではないかと思います。私のコードのエラーは、AuthComponent(またはCake)とはまったく関係がありませんでした。

残念ながら、あなたの場合のエラーが何であるかを知ることはできません-エラーを特定する前に、実際のデバッグを行う必要がありました。

誰かが疑問に思うなら; 私のエラーは、配列として関数にアクセスし、本番サーバーがPHPバージョン<5.4を実行していたことでした。

于 2013-01-28T00:16:33.270 に答える
0

php.iniに関する設定が異なる可能性がありますinclude_path

開発サーバーと本番サーバーで確認します。

echo ini_get('include_path');
于 2013-01-07T10:00:31.707 に答える