美工统筹SEO,为企业电子商务营销助力!
CI框架进修条记(二) -进口文件index.php
一佰互联网站建造(www.taishanly.com) 颁布发表日期 2020-04-28 13:46:29 阅读数: 118
上一节(CI框架进修条记(一) - 情况装置、根基术语和框架流程)中,咱们提到了CI框架的根基流程,这里再次贴出流程图,以备参考:
作为CI框架的进口文件,源码阅读,天然由此起头。在源码阅读的历程中,咱们并不会逐行停止诠释,而只诠释焦点的功效和实现。
1. 设置利用法式情况
define("ENVIRONMENT", "development");
这里的development能够或许是任何你喜好的情况称号(比方dev,再如test),相对应的,你要鄙人面的switch case代码块中,对设定的情况做相干的毛病节制,不然,CI框架会以为你不设置装备摆设好呼应的情况,从而加入历程并给出对应的毛病信息:
default: exit("The application environment is not set correctly.");
为甚么一起头就要设置装备摆设ENVIRONMENT?这是由于,CI框架中良多组件都依靠于ENVIRONMENT的设置装备摆设,咱们看一下system中,援用ENVIRONMENT的处所:
能够或许看到,良多组件都依靠于ENVIRONMENT.比方,检查system/config/Common.php, 这此中有一段引入设置装备摆设文件的代码,是如许实现的:
if ( ! defined("ENVIRONMENT") OR ! file_exists($file_path = APPPATH."config/".ENVIRONMENT."/config.php")) { $file_path = APPPATH."config/config.php"; }
在CI框架中,良多设置装备摆设文件都是经由历程这类体例引入的,是以ENVRIONMENT对CI框架的准确运转时必须的,以是须要在起头的时辰设置装备摆设好ENVIRONMENT。设置ENVIRONMENT的一个益处是:能够或许很便利的切换体系的设置装备摆设而不用点窜体系代码。比方,在体系进入测试阶段时,database设置装备摆设为测试的数据库,而在体系测试终了时,database切换到线上的数据库。这比如是用一个开关节制了体系的情况切换,天然是很是便利的。
2. 设置装备摆设体系目次和利用法式目次
CI框架许可你将体系焦点源码和利用法式代码分隔安排,可是你必须设定好体系的system文件夹和application文件夹(一样,文件夹名字能够或许是任何正当的文件夹称号,而不用然利用"system"和"application"):
$system_path = "system"; $application_folder = "application";
接上去,有这么一段代码:
if (defined("STDIN")) { chdir(dirname(__FILE__)); }
这段代码是干吗的呢?起首,STDIN、STDOUT、STDERR是PHP以 CLI(Command Line Interface)形式运转而界说的三个常量,这三个常量近似于Shell的stdin,stdout,stdout,别离是PHP CLI形式下的规范输入、规范输入和规范毛病流。也便是说,这三行代码是为了保障号令行形式下,CI框架能够或许一般运转。对于PHP CLI的更多细节能够或许参考:http://www.php-cli.com/
3. system目次的准确性考证和application目次考证
(1). system目次的准确性考证
Realpath前往的是目次或文件的相对目次名(不最初的/)
if (realpath($system_path) !== FALSE) { $system_path = realpath($system_path)."/"; } $system_path = rtrim($system_path, "/")."/"; if ( ! is_dir($system_path)) { exit("xxxxxxxx"); }
几个界说的常量(PATH开头的常量表现目次途径,DIR开头的变量表现目次名):
a. SELF(这里指index.php文件)
b. EXT(deprecated,烧毁的,不用存眷)
c. BASEPATH(system文件夹的途径)
d. FCPATH(前端节制器的途径)
e. SYSDIR(体系system目次名)
f. APPPATH(利用法式途径)
检查一切界说的常量的体例:
Print_r(get_defined_constants());
(2)application的目次考证。
代码较简略,不做过量的诠释:
if (is_dir($application_folder)) { define("APPPATH", $application_folder."/"); } else { if ( ! is_dir(BASEPATH.$application_folder."/")) { exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF); } define("APPPATH", BASEPATH.$application_folder."/"); }
进口文件的最初一行,引入CodeIgniter.php(也是下一步阅读的关头)。CodeIgniter.php被称为bootstrap file,也便是它是一个指导文件,是CI框架履行流程的焦点文件。
require_once BASEPATH."core/CodeIgniter.php";
总结一下,index.php并不做太多庞杂的任务,而是近似一个后勤,为CI框架的运转供给了一系列设置装备摆设参数和准确性考证,而这些设置装备摆设和考证,是CI框架能够或许一般运转的关头。
最初,根据老例,贴一下全部文件的源码(简化正文版):
<?php define("ENVIRONMENT", "development"); if (defined("ENVIRONMENT")) { switch (ENVIRONMENT) { case "development": error_reporting(E_ALL); break; case "testing": case "production": error_reporting(0); break; default: exit("The application environment is not set correctly."); } } /* * SYSTEM FOLDER NAME */ $system_path = "system"; /* * APPLICATION FOLDER NAME */ $application_folder = "application"; /* * Resolve the system path for increased reliability */ if (defined("STDIN")) { chdir(dirname(__FILE__)); } if (realpath($system_path) !== FALSE) { $system_path = realpath($system_path)."/"; } $system_path = rtrim($system_path, "/")."/"; if ( ! is_dir($system_path)) { exit("xxxxxxxx"); } /* * set the main path constants */ // The name of THIS file define("SELF", pathinfo(__FILE__, PATHINFO_BASENAME)); // this global constant is deprecataaed. define("EXT", ".php"); // Path to the system folder define("BASEPATH", str_replace("", "/", $system_path)); // Path to the front controller (this file) define("FCPATH", str_replace(SELF, "", __FILE__)); // Name of the "system folder" define("SYSDIR", trim(strrchr(trim(BASEPATH, "/"), "/"), "/")); // The path to the "application" folder if (is_dir($application_folder)) { define("APPPATH", $application_folder."/"); } else { if ( ! is_dir(BASEPATH.$application_folder."/")) { exit("Your application folder path does not appear to be set correctly. Please open the following file and correct this: ".SELF); } define("APPPATH", BASEPATH.$application_folder."/"); } require_once BASEPATH."core/CodeIgniter.php";