この記事では主にCodeIgniterのエラーログ記録方法を紹介し、CodeIgniterフレームワークのファイル構造と対応する機能を詳細に分析し、CodeIgniterフレームワークのエラーログ記録の実装手法を例とともに分析し、隠しインデックスファイルとデータ送信などを分析します。スキルと概要は非常に包括的で、必要な友人はそれを参照できます
この記事の例では、CodeIgniter がエラー ログを記録する方法について説明します。参考のために皆さんと共有してください。詳細は次のとおりです。
CI ワークフロー:
すべての入り口は、アプリケーションが配置されているディレクトリを決定した後、codeigniter/ をロードします。 CodeIgniter.php ファイル。次のファイルはプロセス全体を実行するために順次ロードされます。
index.php: ファイルパスを検出し、codeigniter.phpファイルをロードします。
codeigniter.php: Common/constants....ファイルをロードします。ファイルモードの取得、タイマーの設定、クラスのインスタンス化(エラークラス、拡張クラス、フッククラス、システム拡張、構成クラス、エンコードクラス、ルーティングクラス、プロセスクラス、出力クラス、セキュリティクラス、言語クラス、コントローラ)、リクエストメソッドのロード、出力ビューをレンダリングします。
CodeIgniter のクラスは、ファイル名と同じ名前で保存されます。クラス名の前に「CI_」が付きます。
system/core/common.php: phpバージョンの検出、ファイル権限、コアクラスのロード、構成パラメータの取得、例外/エラークラスのロード、httpリクエストステータスの取得などのパブリック関数が含まれています。 /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:
Checkキャッシュファイルがある場合は、内容を直接出力します。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 つはエラー、つまり PHP の実行中です。2 つ目はデバッグ、システム デバッグです。CI 自体も多くのページに独自のシステム デバッグを追加しています。3 つ目は情報で、操作中にいくつかのメッセージが表示されます。メッセージの内容が書き込まれます。 3. デフォルトでは、エラー ログはアプリケーションの /logs/log-[time].php に保存されます。例: log-2011-6-26 は、今日のログを保存することを意味します。通常、ログの内容を非表示にするには、このアドレスを移動する必要があります。必要に応じて、$config['log_path'] にパスを設定できます。独自のグローバル変数/構成を設定します:
カスタマイズされたセッションなど、他の場所で使用するために独自の完全なプロセス変数を定義する必要がある場合があります。この作業も CI では非常に簡単です。 1. application/config/ に独自の構成ファイルを作成し、ファイルの場所に注意してください。たとえば、独自の構成ファイル mysetting.php、content、$config['log_threshold'] = 1//(可设置:1/2/3/4)
$config['try'] = 'this is my trying';
必要に応じて、application/config/autoload.php を通じて自動読み込みに設定することもできます。
$this->config->load('mysetting');
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的中国官方网,终于在论坛高手的帮助下把问题觖决了,在这里把它贴出来,供大家分享。
首先,隐藏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里:
复制代码 代码如下:
注:这里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 } }
相关推荐:
CI框架(CodeIgniter)实现的数据库增删改查操作总结
以上がCodeIgniter がエラー ログを記録する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。