首頁  >  文章  >  後端開發  >  CodeIgniter記錄錯誤日誌的方法

CodeIgniter記錄錯誤日誌的方法

不言
不言原創
2018-06-02 10:31:161667瀏覽

這篇文章主要介紹了CodeIgniter記錄錯誤日誌的方法,詳細分析了CodeIgniter框架的文件結構與相應的功能,結合實例分析了CodeIgniter框架記錄錯誤日誌的實現技巧,並分析了隱藏index文件與數據傳輸等技巧,總結非常全面,需要的朋友可以參考下

本文實例講述了CodeIgniter記錄錯誤日誌的方法。分享給大家供大家參考,具體如下:

CI工作流程:

所有的入口都從根目錄下的index.php進入,確定應用程式所在目錄後,載入codeigniter/CodeIgniter.php 文件,該文件會依序載入以下文件執行整個流程。

index.php:偵測檔案路徑,載入codeigniter.php檔案

#codeigniter.php:載入Common/constants....文件。取得檔案模式、設定計時器、實例化類別(錯誤類別、擴充類別、鉤子類別、系統擴充、設定類別、編碼類別、路由類別、過程類別、輸出類別、安全類別、語言類別、控制器)、載入請求方法、渲染輸出view。

CodeIgniter的一個類別會儲存為一個php文件,類別名稱與檔案名稱同名,它的核心應用類別會在類別名稱前加上"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/conctroller.php:控制輸出類別

##記錄錯誤日誌:

預設程序不記錄錯誤日誌,如果有需要的話可以設定:

1、在application/config/config.php中設定:

$config['log_threshold'] = 1//(可设置:1/2/3/4)

##如果為0表示不輸出錯誤日誌,具體可查看裡面的介紹;

2、在需要寫入錯誤的頁面調用全域函數log_message('級別','訊息'),等級有三個,一是error,也就是php運行錯誤,二是debug,系統調試,CI本身在很多頁面也加了自己的系統debug,三是info,介紹運行中的一些消息,消息內容自己寫;

3.預設錯誤日誌存放在application/logs/log-[time].php中,它會按日期存放文件,例如:log-2011-6-26表示存入今天的日誌內容,一般情況下為了隱藏日誌內容必須將這個位址挪位,可以在$config['log_path']中設定路徑,依需求最好是完整路徑資訊。

設定自己的全域變數/配置:

有時需要定義自己的全過程變數以供在其它地方使用,如自訂的session等,在CI中這項工作也很輕鬆。

1、在application/config/中建立自己的config文件,注意存放文件位置。例如建立一個自己的設定檔mysetting.php,內容,

$config['try'] = 'this is my trying';

#2、在需要呼叫自訂全域變數的地方使用$this->config ->load('settingfile')函數,例如:


$this->config->load('mysetting');

如果有需要也可以透過application/config/autoload.php設定為自動加載。

3、接下來在同一頁面中使用

$this->config->item('varname')

#函數,例如:$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的中国官方网,终于在论坛高手的帮助下把问题觖决了,在这里把它贴出来,供大家分享。

首先,隐藏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里:

复制代码 代码如下:

0270b8e0a32ec3ebfa0e13d8dfa1eff2">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[&#39;css&#39;] = $this->css;
 $data[&#39;base&#39;] = $this->base;
 $data[&#39;mytitle&#39;] = &#39;Welcome to this site&#39;;
 $data[&#39;mytext&#39;] = "Hello, $name, now we&#39;re getting dynamic!";
 $this->load->view(&#39;testview&#39;, $data); //$data通过参数传递到view
}

这里,把需要传递的数值加入至$data数组,ci在核心类中给自动使用extract()函数把数组“解压”出来,成为一个个变量。所以在view中可以直接这样使用变量:

echo $css;

2、模型与视图的交互

在ci中模型总是用以处理数据,模型中数据处理也是通过controller中转到view,所以最好不要试图模型直接与视图联系。手册中有这样一个例子:

class Blog_controller extends CI_Controller {
 function blog() {
 $this->load->model(&#39;Blog&#39;); //载入模型
 $data[&#39;query&#39;] = $this->Blog->get_last_ten_entries(); //使用模型中的方法,将返回值存入$data数组
 $this->load->view(&#39;blog&#39;, $data); //像上例一样,通过参数传给视图view
 }
}

相关推荐:

CI框架(CodeIgniter)实现的数据库增删改查操作总结

CI框架(CodeIgniter)实现的导入、导出数据操作

以上是CodeIgniter記錄錯誤日誌的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn