2013-03-04 43 views
5

http://ellislab.com/codeigniter/user-guide/general/cli.html私はコマンドラインでテストスクリプトを実行することができません。私はCodeigniterコマンドラインエラー - PHP致命的なエラー:クラス 'CI_Controller'が見つかりません

http://mysite/tools/message/ben 

と機能にアクセスすることができます

私のブラウザで
class Tools extends CI_Controller { 

    public function message($to = 'World') 
    { 
     echo "Hello {$to}!".PHP_EOL; 
    } 
} 

/var/www/mysite /にアプリケーション/コントローラに位置

私のコントローラは、/正しく出力 "こんにちはベン"

端末からは、次を実行できるはずです。

$ php index.php tools message "Ben"

私の端末は印刷する必要があります:「こんにちはベン」私は次のエラーを取得するしかし

を:

PHP Fatal error: Class 'CI_Controller' not found in /var/www/mysite/system/core/CodeIgniter.php on line 233

私のサーバーはかなり標準です。 ubuntu LAMP。 CodeIgniterのはかなり標準すぎると私は、コマンドラインを介して非CIスクリプトを実行している問題はない

私のPHPのバイナリだけは/ usr/bin/php <に位置しています

からThis postは、USR/binに/ PHPから直接CIを実行している問題を示唆します私はPHPサービスを共有しているわけではありません。なぜこれがPHPのCIスクリプトの実行方法に違いがあるのか​​わかりません。

これをどのようにデバッグするかについてのヘルプや説明があれば幸いです。

ありがとうございます。

+1

私は/ var/www/mysite /からスクリプトを実行していますか? – devrooms

+0

はい、そうでなければ、すぐに「入力ファイルを開くことができませんでした」というエラーが表示されます。 – Mijahn

答えて

11

解決済み! (部分的に)問題はCodeIgnitersのエラーログでした。アプリケーション/設定/ config.phpので

は、私は、次の設定プロパティを変更し:

$config['log_threshold'] = 0; 

これは、ログを無効にし、実行$ php index.phpすることを可能にします。

誰でもCI CLIでこのエラーが表示される理由を説明することができます。この問題を抱えていて、エラーログオンで解決する必要がある他の人を助けるかもしれません。 Mijahnへ

0

このsiteは、コマンドラインからcodeigniterを実行するために、$ _SERVER ['PATH_INFO']変数を設定する必要があります。

$_SERVER['PATH_INFO'] is usually supplied by php when a web request is made. However, since we are calling this script from the command line, we need to emulate this small part of the environment as a web request.

+0

ありがとう、リンクでは、CIアプリケーションフォルダの外でPHP文書を使用し、index.phpをインクルードしてCIを読み込みます。アプリケーション内のCIコントローラでコマンドを実行する必要があります。私は$ config ['uri_protocol'] = "PATH_INFO"を変更しましたが、それでも同じ問題があります。 – Mijahn

2

私はこの同じ問題を抱えていた、と問題を把握するために、コードをトレースするのに約2時間後に、ネイティブのPHPを利用する場合CI_Controllerをロードするとの競合のいくつかの並べ替えがあるようですload_class関数。

私はCommon.phpファイル(ハック、私が知っている)に以下の変更を加えてこの問題を回避しました。

//$_log =& load_class('Log'); 
require_once('system/libraries/Log.php'); 
$_log = new CI_Log(); 

私のログは、私が望むのとまったく同じように作成されました。このハックが役立つことを願っています。

+0

私にとっては、Logクラスのマイニングの問題ではなく、Common.phpの例外ハンドラ したがって、例外クラスのロードを適宜変更しなければなりませんでした。 '// $ _error =&load_class( '例外'、 'コア'); require_once( 'system/core/Exceptions.php'); $ _error = new CI_Exceptions( 'core'); ' – sp00n

3

エラーを解決するには「CI_Controllerクラスが見つかりません」Application -> Config -> database.phpに行き、データベース名を確認してください。

+0

まだコメントを投稿するのに十分な評判がないことを理解していますが、この回答は実際には1つのようです。詳細を追加してみてください。 – arghtype

+0

@sanjeev goelあなたは私たちに正しい方向を指していますが、それを理解するには1時間かかります。 CIがこのエラーを出しているので、私のケースでは、CIのdbドライバが原因です。ローカルサーバのDBがチーム開発者によって削除されたためです。しかし明らかにCIからの誤りは理解できません。 – hi0001234d

+0

あなたは構成データベースを見てください。データベース名、ユーザー名、パスワードが一致している必要があります。 –

0

答えはthis Stack Overflow postで提供されました。 system/core/CodeIgniter.php

は、周りのライン75上で、変更:

set_error_handler('_exception_handler');

に...

set_exception_handler('_exception_handler');

他のユーザーは、これは彼らにへと、より良いバックトレースを与えたことを報告しています根本的な問題をデバッグしますが、私にとっては、これは実際に問題を完全に取り除きました。

関連する問題