>  기사  >  백엔드 개발  >  CodeIgniter가 오류 로그를 기록하는 방법

CodeIgniter가 오류 로그를 기록하는 방법

不言
不言원래의
2018-06-02 10:31:161673검색

이 글에서는 주로 CodeIgniter가 오류 로그를 기록하는 방법을 소개하고, CodeIgniter 프레임워크의 파일 구조와 해당 기능을 자세히 분석하고, 오류 로그를 기록하는 CodeIgniter 프레임워크의 구현 기술을 예제와 함께 분석하고, 숨겨진 인덱스 파일과 데이터 전송 등을 분석합니다. . 기술과 요약은 매우 포괄적이므로 필요한 친구가 참조할 수 있습니다

이 기사의 예에서는 CodeIgniter가 오류 로그를 기록하는 방법을 설명합니다. 참조를 위해 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

CI 작업 흐름:

모든 입구는 루트 디렉터리의 index.php에서 입력됩니다. 애플리케이션이 있는 디렉터리를 결정한 후 codeigniter/를 로드합니다. CodeIgniter.php 파일입니다. 전체 프로세스를 실행하기 위해 다음 파일들이 순차적으로 로드됩니다.

index.php: 파일 경로를 감지하고 codeigniter.php 파일을 로드합니다.

codeigniter.php: Common/constants.... 파일을 로드합니다. 파일 모드 가져오기, 타이머 설정, 클래스 인스턴스화(오류 클래스, 확장 클래스, 후크 클래스, 시스템 확장, 구성 클래스, 인코딩 클래스, 라우팅 클래스, 프로세스 클래스, 출력 클래스, 보안 클래스, 언어 클래스, 컨트롤러), 요청 메서드 로드, 출력 뷰를 렌더링합니다.

CodeIgniter의 클래스는 PHP 파일로 저장됩니다. 클래스 이름은 파일 이름과 동일하며, 핵심 애플리케이션 클래스는 클래스 이름 앞에 "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: 확인 캐시 파일이 있는 경우, 존재하는 경우 내용을 직접 출력합니다.

system/core/Input.php: HTTP 요청 및 사용자가 제출한 데이터 필터링

system/core/Long.php: 프롬프트 언어 변수 초기화

system/core/controller.php: 출력 제어 클래스

는 오류 로그를 기록합니다:

기본 프로그램은 오류 로그를 기록하지 않습니다. 필요한 경우 설정할 수 있습니다:

1 application/config/config.php에서 설정합니다:

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

0이면 오류 로그가 출력되지 않음을 의미합니다. 자세한 내용은 소개를 참조하세요.

2 오류를 작성해야 하는 페이지에서 전역 함수 log_message('level','message')를 호출하세요. 하나는 PHP가 실행 중일 때 발생하는 오류이고, 두 번째는 디버그, 시스템 디버깅이며, CI 자체도 여러 페이지에 자체 시스템 디버그를 추가했으며, 세 번째는 정보, 작업 중 일부 메시지, 메시지 내용을 소개합니다.

3. 기본적으로 오류 로그는 애플리케이션에 저장됩니다. /logs/log-[time].php에 날짜별로 파일을 저장합니다. 일반적으로 로그 내용을 숨기려면 이 주소를 이동해야 합니다. $config['log_path']에서 경로를 설정할 수 있으며, 필요에 따라 전체 경로 정보를 설정하는 것이 좋습니다.

자신만의 전역 변수/구성 설정:

때때로 사용자 정의 세션 등 다른 장소에서 사용할 전체 프로세스 변수를 정의해야 하는 경우도 있습니다. 이 작업은 CI에서도 매우 쉽습니다.

1. application/config/에 자신만의 구성 파일을 만들고 파일 위치에 주의하세요. 예를 들어, mysetting.php, content,

$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');가 출력됩니다. 위에서 볼 수 있습니다.
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으로 문의하세요.