8

http://ellislab.com/codeigniter/user-guide/general/cli.htmlにあるユーザー ガイドの指示に従った後、コマンド ラインからテスト スクリプトを実行できません。

/var/www/mysite/application/controllers/ にあるコントローラー

    class Tools extends CI_Controller {

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

ブラウザでアクセスできます

http://mysite/tools/message/ben

そして、関数は「Hello ben」を正しく出力します

端末から実行できるはずです:

$ php index.php ツール メッセージ "Ben"

私の端末は「Hello Ben」と出力するはずです。

ただし、次のエラーが表示されます。

PHP 致命的なエラー: 233 行目の /var/www/mysite/system/core/CodeIgniter.php にクラス 'CI_Controller' が見つかりません

私のサーバーはかなり標準的です。Ubuntu LAMP. Codeigniterもかなり標準的で、コマンドラインから非CIスクリプトを実行しても問題ありません

私の PHP バイナリは /usr/bin/php にしかありません <--この投稿は、usr/bin/php から直接 CI を実行している問題を示唆していますが、私は共有 PHP サービスを運用しておらず、その理由がわかりませんPHP が CI スクリプトを実行する方法が異なります。

これをデバッグする方法についてのヘルプまたは指示をいただければ幸いです。

前もって感謝します。

4

5 に答える 5

13

解決しました!(部分的に) 問題は CodeIgniters のエラー ログでした。

application/config/config.php で、次の構成プロパティを変更しました。

$config['log_threshold'] = 0;

これにより、ロギングが無効になり$ php index.php、実行が許可されます。

CIがCLI PHPでのみこのエラーを表示する理由を誰かが説明できる場合-この問題があり、エラーログオンで解決する必要がある他の人を助けるかもしれません。

于 2013-03-28T18:52:03.120 に答える
2

ミジャンへ:

私はこれと同じ問題を抱えており、問題を把握するためにコードを約 2 時間トレースした後、ネイティブ PHP の load_class 関数を使用するときに CI_Controller のロードに何らかの競合があるようです。

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

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

私のログは、私が望んでいたとおりに作成されました。このハックが役立つことを願っています。

于 2013-10-16T00:10:50.953 に答える
0

このスタックオーバーフローの投稿で提供された答えは私にとってはうまくいきました。

system/core/CodeIgniter.phpの 75 行目あたりで、次のように変更します。

set_error_handler('_exception_handler');

に...

set_exception_handler('_exception_handler');

他のユーザーは、これにより根本的な問題をデバッグするためのより良いバックトレースが得られたと報告していますが、私にとっては、これにより実際に問題が完全に解決されました.

于 2016-12-12T10:44:41.527 に答える
0

このサイトでは、コマンド ラインから codeigniter を実行するように指示されています。$_SERVER['PATH_INFO'] 変数を設定する必要があります。

$_SERVER['PATH_INFO'] は通常、Web リクエストが行われたときに php によって提供されます。ただし、このスクリプトはコマンド ラインから呼び出すため、環境のこの小さな部分を Web 要求としてエミュレートする必要があります。

于 2013-03-04T21:10:45.360 に答える