很多站长朋友们都不太清楚php记录执行过程,今天小编就来给大家整理php记录执行过程,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 thinkphp 模板与控制器之间执行过程 2、 php底层原理 php是如何运行的 3、 php语言的执行过程 4、 PHP程序的运行的时候会显示程序执行的过程是怎么回事? thinkphp 模板与控制器之间执行过程ThinkPHP中的跨控制器调用与框架执行流程
一、跨控制器调用
UserController.class.php
<?php
namespace Home/Controller
use Think/Controller
class UserController extends Controller{
public function show(){
//TODO
}
}
复制代码
IndexController.class.php(方法一)
复制代码
<?php
namespace Home/Controller
use Think/Controller
class IndexController extends Controller{
public function count(){
//通过快捷函数来实例化一个控制器
//User为控制器名
$user = A('User');
$user-> show();
}
}
IndexController.class.php(方法二)
<?php
namespace Home/Controller
use Think/Controller
class IndexController extends Controller{
public function count(){
//User为控制器名,show为其方法
R('User/show');
}
}
二、ThinkPHP执行流程
当一个客户端发起一个请求的时候先去访问应用入口文件
<?php
// 应用入口文件
// 检测PHP环境
if(version_compare(PHP_VERSION,'5.3.0','<')) die('require PHP > 5.3.0 !');
// 开启调试模式 建议开发阶段开启 部署阶段注释或者设为false
define('APP_DEBUG',True);
// 引入ThinkPHP入口文件
require 'ThinkPHP/ThinkPHP.php';
在应用入口文件中引入TinkPHP框架的入口文件,然后执行该文件中的代码。
在TinkPHP.php中做了一些初始化操作,比如定义了大量的全局常量,运行环境检测等
ThinkPHP.php
<?php
// 记录开始运行时间
$GLOBALS['_beginTime'] = microtime(TRUE);
// 记录内存初始使用
define('MEMORY_LIMIT_ON',function_exists('memory_get_usage'));
if(MEMORY_LIMIT_ON) $GLOBALS['_startUseMems'] = memory_get_usage();
// 版本信息
const THINK_VERSION = '3.2.3';
// URL 模式定义
const URL_COMMON = 0; //普通模式
const URL_PATHINFO = 1; //PATHINFO模式
const URL_REWRITE = 2; //REWRITE模式
const URL_COMPAT = 3; // 兼容模式
// 类文件后缀
const EXT = '.class.php';
// 系统常量定义
defined('THINK_PATH') or define('THINK_PATH', __DIR__.'/');
defined('APP_PATH') or define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/');
defined('APP_STATUS') or define('APP_STATUS', ''); // 应用状态 加载对应的配置文件
defined('APP_DEBUG') or define('APP_DEBUG', false); // 是否调试模式
if(function_exists('saeAutoLoader')){// 自动识别SAE环境
defined('APP_MODE') or define('APP_MODE', 'sae');
defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'Sae');
}else{
defined('APP_MODE') or define('APP_MODE', 'common'); // 应用模式 默认为普通模式
defined('STORAGE_TYPE') or define('STORAGE_TYPE', 'File'); // 存储类型 默认为File
}
defined('RUNTIME_PATH') or define('RUNTIME_PATH', APP_PATH.'Runtime/'); // 系统运行时目录
defined('LIB_PATH') or define('LIB_PATH', realpath(THINK_PATH.'Library').'/'); // 系统核心类库目录
defined('CORE_PATH') or define('CORE_PATH', LIB_PATH.'Think/'); // Think类库目录
defined('BEHAVIOR_PATH')or define('BEHAVIOR_PATH', LIB_PATH.'Behavior/'); // 行为类库目录
defined('MODE_PATH') or define('MODE_PATH', THINK_PATH.'Mode/'); // 系统应用模式目录
defined('VENDOR_PATH') or define('VENDOR_PATH', LIB_PATH.'Vendor/'); // 第三方类库目录
defined('COMMON_PATH') or define('COMMON_PATH', APP_PATH.'Common/'); // 应用公共目录
defined('CONF_PATH') or define('CONF_PATH', COMMON_PATH.'Conf/'); // 应用配置目录
defined('LANG_PATH') or define('LANG_PATH', COMMON_PATH.'Lang/'); // 应用语言目录
defined('HTML_PATH') or define('HTML_PATH', APP_PATH.'Html/'); // 应用静态目录
defined('LOG_PATH') or define('LOG_PATH', RUNTIME_PATH.'Logs/'); // 应用日志目录
defined('TEMP_PATH') or define('TEMP_PATH', RUNTIME_PATH.'Temp/'); // 应用缓存目录
defined('DATA_PATH') or define('DATA_PATH', RUNTIME_PATH.'Data/'); // 应用数据目录
defined('CACHE_PATH') or define('CACHE_PATH', RUNTIME_PATH.'Cache/'); // 应用模板缓存目录
defined('CONF_EXT') or define('CONF_EXT', '.php'); // 配置文件后缀
defined('CONF_PARSE') or define('CONF_PARSE', ''); // 配置文件解析方法
defined('ADDON_PATH') or define('ADDON_PATH', APP_PATH.'Addon');
// 系统信息
if(version_compare(PHP_VERSION,'5.4.0','<')) {
ini_set('magic_quotes_runtime',0);
define('MAGIC_QUOTES_GPC',get_magic_quotes_gpc()? true : false);
}else{
define('MAGIC_QUOTES_GPC',false);
}
define('IS_CGI',(0 === strpos(PHP_SAPI,'cgi') || false !== strpos(PHP_SAPI,'fcgi')) ? 1 : 0 );
define('IS_WIN',strstr(PHP_OS, 'WIN') ? 1 : 0 );
define('IS_CLI',PHP_SAPI=='cli'? 1 : 0);
if(!IS_CLI) {
// 当前文件名
if(!defined('_PHP_FILE_')) {
if(IS_CGI) {
//CGI/FASTCGI模式下
$_temp = explode('.php',$_SERVER['PHP_SELF']);
define('_PHP_FILE_', rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
}else {
define('_PHP_FILE_', rtrim($_SERVER['SCRIPT_NAME'],'/'));
}
}
if(!defined('')) {
$_root = rtrim(dirname(_PHP_FILE_),'/');
define('', (($_root=='/' || $_root=='\\')?'':$_root));
}
}
// 加载核心Think类 ThinkPHP/Library/Think/Think.class.php
require CORE_PATH.'Think'.EXT;
// 应用初始化,调用Think类的静态方法start()
Think\Think::start();
Think.class.php
View Code
在start方法中主要的工作就是读取配置文件信息(Tinkphp/Mode/common.php, Thinkphp/Conf/convention.php),引入核心文件(Thinkphp/Library/Think),如果是应用模式则会生成runntime.php文件,如果框架被第一次调用还会为了我们生成应用目录。在start最后调用了App:run()静态方法。
App.class.php
View Code
在该类中有两个重要的方法,init()和exec()方法。init()主要进行路由解析,看用户是请求那个模块下的哪个控制器的方法。而exec()则是根据init()解析的结果通过反射机制来实例化一个Controller并并调用相应的方法。
总结
通过流程分析来看,这个框架主要由三个文件构成ThinkPHP.php,Think.class.php, App.class.php,当然还有其它的一些辅助类或方法来帮助完成整个响应。
php底层原理 php是如何运行的1、PHP动态语言执行过程:拿到一段代码后,经过词法解析、语法解析等阶段后,源程序会被翻译成一个个指令(opcodes),然后ZEND虚拟机顺次执行这些指令完成操作。PHP本身是用C实现的,因此最终调用的也是C的函数,实际上,我们可以把PHP看做一个C开发的软件。
2、PHP的4层运行体系:
(1)Zend引擎:Zend整体用纯C实现,是PHP的内核部分,他将PHP代码翻译(词法、语法解析等一系列编译过程)为可执行opcode的处理并实现相应的处理方法、实现了基本的数据结构(如:hashtable、OO)、内存分配机制及管理、提供了相应的api方法供外部调用,是一切的核心,所有的外围功能均围绕Zend实现。
(2)Extensions:围绕着Zend引擎,extensions通过组件式的方式提供各种基础服务,我们常见的各种内置函数(array系列)、标准库等都是通过extension来实现,用户也可以根据需要实现自己的extension的典型应用)。
(3)Sapi:Sapi全称ServerApplicationProgrammingInterface,也就是服务端应用编程接口,Sapi通过一系列钩子函数,使得PHP可以和外围交互数据,这是PHP非常优雅和成功的设计,通过sapi成功的将PHP本身和上层应用解耦隔离,PHP可以不再考虑如何针对不同应用进行兼容,而应用本身也可以针对自己的特点实现不同的处理方式。
(4)上层应用:这就是我们平时编写的PHP程序,通过不同的spai方式得到各种各样的应用模式,如何通过webserver实现web应用、在命令行下已脚本方式运行等等。
php语言的执行过程php执行顺序是从上往下执行的。执行前先从上往下检查有无语法错误,像少分号括号什么的,没有则将整个程序读入内存,然后在执行内存中的程序。所以一旦执行起来,如果程序还没执行完,你改程序不会起作用的
PHP程序的运行的时候会显示程序执行的过程是怎么回事?提示上不是说了么,system\verify.php 第33行,使用了未定义的常量 rich_check_number
可以在服务器上通过修改php.ini实现屏蔽、自由显示错误信息
display_errors = On 修改为 Off可不显示所有错误信息
error_reporting是更改错误显示级别的
关于php记录执行过程的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php记录执行过程 php如何记录日志的详细内容...