Maison >développement back-end >tutoriel php >Comment CodeIgniter enregistre les journaux d'erreurs
Cet article présente principalement la méthode d'enregistrement des journaux d'erreurs CodeIgniter, analyse en détail la structure des fichiers et les fonctions correspondantes du framework CodeIgniter, analyse les techniques de mise en œuvre du framework CodeIgniter enregistrant les journaux d'erreurs avec des exemples et analyse les fichiers et données d'index cachés. Le résumé de la transmission et des autres techniques est très complet. Les amis dans le besoin peuvent se référer à
Cet article décrit la méthode d'enregistrement des journaux d'erreurs par CodeIgniter. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Workflow CI :
Toutes les entrées sont saisies à partir d'index.php dans le répertoire racine, déterminez le répertoire où se trouve l'application Enfin, chargez le fichier codeigniter/CodeIgniter.php, qui chargera les fichiers suivants séquentiellement pour exécuter l'ensemble du processus.
index.php : Détecter le chemin du fichier et charger le fichier codeigniter.php
codeigniter.php : Charger le fichier Common/constants.... . Obtenir le mode fichier, définir la minuterie, instancier la classe (classe d'erreur, classe d'extension, classe de hook, extension système, classe de configuration, classe d'encodage, classe de routage, classe de processus, classe de sortie, classe de sécurité, classe de langage, contrôleur), charger la méthode de requête, rendre la vue de sortie.
Une classe de CodeIgniter sera enregistrée sous forme de fichier php. Le nom de la classe a le même nom que le nom du fichier. Sa classe d'application principale aura "CI_" devant le nom de la classe.
system/core/common.php : inclut la détection de la version php, les autorisations des fichiers, le chargement des classes principales, l'obtention des paramètres de configuration, le chargement des classes d'exception/erreur, l'obtention du statut de la requête http, etc. Fonctions publiques
application/config/constants.php : Définir les constantes d'autorisation des fichiers, les fichiers de définition de macro d'application
system/core/Benchmark.php : Utilisé pour enregistrer le temps d'exécution
system/core/Hooks.php : Détecter s'il y a un appel d'objet hook
system/core/Config .php : Fournir des méthodes de gestion des fichiers de configuration, détecter les paramètres application/config/config.php
application/config/config.php : Configurer les paramètres globaux
system/core/URI.php : Analyser les paramètres d'URL
system/core/Router.php : Détecter la configuration du routage et analyser les requêtes HTTP pour déterminer qui doit gérer it
system/core/Output.php : Vérifiez s'il existe un fichier cache, et s'il existe, affichez le contenu directement.
system/core/Input.php : Filtre les requêtes HTTP et toutes les données soumises par l'utilisateur
system/core/Long.php : Initialisation Variables de langage d'invite
system/core/controller.php : Classe de sortie de contrôle
Erreur de journal :
Programme par défaut Do ne pas enregistrer les journaux d'erreurs, si nécessaire, vous pouvez définir :
1. Définir dans application/config/config.php :
$config['log_threshold'] = 1//(可设置:1/2/3/4)
S'il est 0, cela signifie qu'aucun journal d'erreurs ne sera généré. Veuillez vous référer à l'introduction à l'intérieur pour plus de détails
2 Appelez la fonction globale log_message('level','message') sur la page où se trouvent les erreurs. doit être écrit. Il y a trois niveaux, le premier est l'erreur, c'est-à-dire l'erreur d'exécution de PHP, le deuxième est le débogage, le débogage du système, CI lui-même a également ajouté son propre débogage du système sur de nombreuses pages, et le troisième est l'information, qui introduit certains messages pendant le fonctionnement, et le contenu du message est écrit par vous-même
3 Par défaut, le journal des erreurs est stocké dans application/logs/log-[time].php, qui stocke les fichiers par date. . Par exemple : log-2011-6-26 signifie que le contenu du journal d'aujourd'hui est stocké. Dans des circonstances normales, afin de masquer le contenu du journal, vous pouvez définir le chemin dans $config['log_path']. Il est préférable d'utiliser les informations de chemin complètes selon les besoins.
Définissez vos propres variables/configuration globales :
Parfois, vous devez définir vos propres variables de processus complètes pour les utiliser à d'autres endroits, comme des sessions personnalisées, etc., en CI Ce travail est également très facile.
1. Créez votre propre fichier de configuration dans application/config/ et faites attention à l'emplacement du fichier. Par exemple, créez votre propre fichier de configuration mysetting.php, content,
$config['try'] = 'this is my trying';
2. Utilisez $this-> là où vous devez appeler des variables globales personnalisées ;config->load('settingfile'), telle que :
$this->config->load('mysetting');
Si nécessaire, vous pouvez également utiliser application/config /autoload .php est configuré pour se charger automatiquement.
3. Ensuite, utilisez la fonction
$this->config->item('varname')
sur la même page, telle que : $this->config->. ;item ('try'); affichera : ceci est mon essai ;
Comme le montre ce qui précède, l'appel de fonction dans CI se présente sous la forme : $this->filename .On peut également voir que CI convertit l'intégralité du système. Le système le traite comme une grande classe, puis obtient les méthodes correspondantes par chargement, héritage, etc.
Plus de références de variables personnalisées : http://codeigniter.org.cn/user_guide/libraries/config.html
Masquer index.php et charger des fichiers externes :
其实不管是在用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['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)实现的数据库增删改查操作总结
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!