ホームページ >バックエンド開発 >PHPチュートリアル >CodeIgniter でエラー ログを記録する方法の包括的なまとめ、codeigniter 記録ログ_PHP チュートリアル
この記事ではCodeIgniterのエラーログの記録方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:
CI ワークフロー:
すべての入り口はルートディレクトリのindex.phpから入力されます。アプリケーションが配置されているディレクトリを決定した後、このファイルは次のファイルを順番にロードしてプロセス全体を実行します。
index.php: ファイルパスを検出し、codeigniter.phpファイルをロードします
codeigniter.php: 共通/定数....ファイルをロードします。ファイルモードの取得、タイマーの設定、クラスのインスタンス化(エラークラス、拡張クラス、フッククラス、システム拡張、構成クラス、エンコードクラス、ルーティングクラス、プロセスクラス、出力クラス、セキュリティクラス、言語クラス、コントローラ)、リクエストメソッドのロード、出力ビューをレンダリングします。
CodeIgniter のクラスは、ファイル名と同じ名前で保存されます。クラス名の前に「CI_」が付きます。
system/core/common.php: PHPバージョンの検出、ファイル権限、コアクラスのロード、構成パラメータの取得、例外/エラークラスのロード、httpリクエストステータスの取得などのパブリック関数が含まれています
application/config/constants.php: ファイルパーミッション定数とアプリケーションマクロ定義ファイルを設定します
system/core/Benchmark.php: 実行時間を記録するために使用されます
system/core/Hooks.php: フックオブジェクトの呼び出しがあるかどうかを検出します
system/core/Config.php: 設定ファイルを管理し、application/config/config.php パラメータを検出するためのメソッドを提供します
application/config/config.php: グローバルパラメータを設定する
system/core/URI.php: URLパラメータを解析する
system/core/Router.php: ルーティング設定を検出し、HTTP リクエストを解析して誰が処理すべきかを決定します
system/core/Output.php: キャッシュファイルの有無を確認し、存在する場合は内容を直接出力します。
system/core/Input.php: HTTPリクエストとユーザーが送信したデータをフィルタリングします
system/core/Long.php: プロンプト言語変数を初期化します
system/core/controller.php: 制御出力クラス
エラーログを記録:
デフォルトのプログラムはエラーログを記録しません。必要に応じて設定できます:
1. application/config/config.php で設定します:
リーリー0 の場合は、エラー ログが出力されないことを意味します。詳細については、内部の概要を参照してください。
2. エラーを書き込む必要があるページでグローバル関数 log_message('level','message') を呼び出します。1 つはエラー、2 つはデバッグです。システムのデバッグ。CI 自体も多くのページで使用されています。3 番目は情報です。メッセージの内容は私が書きました。3. デフォルトでは、エラー ログは application/logs/log-[time].php に保存されます。例: log-2011-6-26 は、今日のログの内容が保存されることを意味します。ログの内容を非表示にするには、このアドレスを移動する必要があります。必要に応じて、$config['log_path'] でパスを設定します。
独自のグローバル変数/構成を設定します:カスタマイズされたセッションなど、他の場所で使用するために独自のプロセス変数を定義する必要がある場合があります。この作業も CI では非常に簡単です。
1. application/config/ に独自の設定ファイルを作成し、ファイルの場所に注意してください。たとえば、独自の構成ファイル mysetting.php、content、
を作成します。 リーリー2. カスタム グローバル変数を呼び出す必要がある場合は、次のような $this->config->load('settingfile') 関数を使用します。
リーリー必要に応じて、application/config/autoload.php を通じて自動読み込みに設定することもできます。
リーリー
次のような関数: $this->config->item('try'); は次のように出力されます: this is my trying;上記からわかるように、
CI の関数呼び出しは $this->filename の形式になっています。また、CI がシステム全体を大きなクラスとして扱い、対応するメソッドを取得することもわかります。ロード、継承など。
カスタム変数の詳細については、http://codeigniter.org.cn/user_guide/libraries/config.html を参照してください。
index.phpを非表示にして外部ファイルをロードします:
実際、CI を使用しているか ZF を使用しているかに関係なく、パスの問題という同じ問題が発生します。 ZF を CMS として使用していた初期の頃、.htaccess ファイルで js、css、img などのリソース ファイルをリダイレクトしないように設定していました。しかし、今日CIを使用しているときに、長い間作業した後、それを忘れてしまい、CIの公式中国語Webサイトにログインして、フォーラムの専門家の助けを借りて最終的に問題を解決しました。みんなで共有できるようにここに投稿しました。
首先,隐藏url中的index.php文件,这样访问其它目录的时候就不会有http://www.xxx.com/index.php/xxx的样式出现,面是直接http://www.xxx.com/xxx形式,在根目录.htaccess文件里设置(作用是隐藏index.php,有时index.php可能不在根目录,则htaccess须移到index.php所在目录),如下:
RewriteEngine on RewriteCond $1 !^(index\.php|images|js|css|robots\.txt) #这里排除了images、js、css目录及index.php、robots.txt文件 RewriteRule ^(.*)$ index.php/$1 [L]
这里JS,CSS,IMG等资源文件夹与SYSTEM文件夹放在同一级下,独立放置的好处是不用受htaccess的限制,因为htaccess文件写明Deny from all,即拒绝访问。打开application/config/config.php改写配置:
$config['base_url'] = "http://127.0.0.1/"; $config['index_page'] = "index.php";
如果
$config['base_url'] = http://127.0.0.1;
后面没加'/',则在model_rewrite最后一行应写RewriteRule ^(.*)$ /index.php/$1 [L],在index.php前加一个'/'。然后在JS文件夹中建立ajax.js文件,我在VIEW层中的文件为index.html。这样我要引入JS时,可以用CI自带的BASE_URL来设置,如下:
在controllers里相关控制网页里添加(在其它load之前):
$this->load->helper('url');
在views表现的index.html里:
复制代码 代码如下:29fa502d5614635ae5a01351a163c967">2cacc6d41bbb37262a98f745aa00fbf0
注:这里url是网站相对URL(好处是可以更改根目录后相对地址不用改变)
这里js文件夹没有重定向,所以可以正常访问,而如果是受限制的页面则比较麻烦了。
好了,CI中引入外部的JS与CSS就这么简单。
注别的说明:“ RewriteCond $1 !^(index\.php|images|js|css|robots\.txt) ”这里代码的意思是:任意你想访问的资源都不被重定向时,都可写在这里。有时,网站没有加载CSS,JS(它的路径都是正确的)时,都是被重定向了,这要注意。
具体可查看CI的中国官论坛 http://codeigniter.org.cn/user_guide/helpers/url_helper.html,URL辅助函数一节,
http://codeigniter.org.cn/user_guide/general/urls.html,url设置,
http://codeigniter.org.cn/forums/thread-4-1-2.html,Hex关于隐藏index.php的说明,但他在model_rewrite用了index\\.php,我觉得用双反斜杠有误。
(另外:特别谢谢CI中国官论坛上的Hex 与visvoy )
数据间的传输:
1、将数据从控制器传入视图
由于控制器controllers在ci中扮演交通警察的角色,其是一个大类,而视图view作为controller类中的一个函数中的函数,所以view可以使用controller中的属性。所以可以这样写:
Controller类Test
class Test extends CI_Controller { public static $test2=''; //定义一个属性 public function __construct(){ parent::__construct(); self::$test2 = $this->load->view('new','',true); //给$test2这个属性赋值 } public function index() { $this->load->helper('url'); $this->load->view('anchor'); } }
View.php
<?php echo Test::$test2; //直接使用类中的值 ?>
这种直接使用controllers类中的值的方法虽然可行,却不是ci所提倡的。一般来说在controller中使用$this->load->view()的时候可以通过参数传值给view视图:
function index() { $data['css'] = $this->css; $data['base'] = $this->base; $data['mytitle'] = 'Welcome to this site'; $data['mytext'] = "Hello, $name, now we're getting dynamic!"; $this->load->view('testview', $data); //$data通过参数传递到view }
这里,把需要传递的数值加入至$data数组,ci在核心类中给自动使用extract()函数把数组“解压”出来,成为一个个变量。所以在view中可以直接这样使用变量:
echo $css;
2、模型与视图的交互
在ci中模型总是用以处理数据,模型中数据处理也是通过controller中转到view,所以最好不要试图模型直接与视图联系。手册中有这样一个例子:
class Blog_controller extends CI_Controller { function blog() { $this->load->model('Blog'); //载入模型 $data['query'] = $this->Blog->get_last_ten_entries(); //使用模型中的方法,将返回值存入$data数组 $this->load->view('blog', $data); //像上例一样,通过参数传给视图view } }
更多关于CodeIgniter相关内容感兴趣的读者可查看本站专题:《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《php优秀开发框架总结》、《ThinkPHP入门教程》、《ThinkPHP常用方法总结》、《Zend FrameWork框架入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。