ThinkPHP (thinkpad)

教程大全 2025-07-13 21:10:51 浏览

【一】代码调试

(1)跟踪Target="_blank">信息

①简介:用于展示系统执行的相关状况,类似于快递的物流信息。ThinkPHP中默认关闭。如需使用,则通过配置项SHOW_PAGE_TRACE(显示页面跟踪)来配置。

②位置:查找后发现上述配置项在主配置文件(系统配置项)Think/Conf/convention.php中不存在,因为刚部署完代码时应用配置文件(Application/Common/Conf/config.php)和

分组配置文件(Appliction/Home/Conf/config.php)中为空,所以也不存在页面跟踪配置项。

③注意:在ThinkPHP里,除了主配置文件里已经列出的配置项,还有其他零星的配置项,在其他地方用到。需要使用的话可以在配置文件里定义。

④定义:如定义到分组配置下,则只能用于该分组,所以将其定义到应用级别的配置文件Application/Common/Conf/config.php里(数据库配置信息所在文件)。

//显示跟踪信息

‘SHOW_PAGE_TRACE’=>true,//默认为false关闭

⑤开启后,在页面右下角会出现一个小图标。包含ThinkPHP的logo和当前请求执行时间(单位:s)。点击后会开启类似浏览器控制器调试的窗口,包含当前页面的一些调试信息。分为基本(包含请求执行的一些信息)、文件(当前请求一共加载的页面)、流程(系统执行流程)、错误(发生的错误信息)、SQL(当前请求执行的sql代码)、调试(调试信息)

上述的基本(包含请求执行的一些信息)中主要看文件加载数和配置加载数;同时在文件选项下还加载了函数库文件和3大配置文件

(2)两种模式

①分类及区别:

在ThinkPHP中为了方便开发,提供了两种模式:开发/模式模式,生产模式

thinkpad

开发/调试模式:开发调试阶段所使用的模式(错误信息比较详细,方便调试);

生产模式:上线时所使用的模式(错误信息比较模糊);

②详解:

ThinkPHP里默认是生产模式,其配置项名字为APP_DEBUG,在入口文件里有配置

//开启调试模式建议开发阶段开启部署阶段注释或者设为false

define(‘APP_DEBUG’,True);

所以当APP_DEBUG为false时为生产模式,为true时是调试/开发模式。

③差异:

1.报错信息差异

开发模式下的报错信息:会将错误的类型和具体报错文件输出,便于开发人员调试;

生产模式下的报错信息:只会提示页面错误,请稍后再试~,不会输出错误类型和文件位置

2.跟踪信息的差异

调试模式下的文件加载数较多,且调试模式下加载文件和生产模式相比,多了系统函数库文件

生产模式下系统函数库文件、系统配置文件、应用配置文件均没有被加载,但多了个common~runtime.php文件。需要加载的系统配置项和应用配置项此时都压缩到了common~runtime.php文件下。

相比调试模式,生产模式下使用了缓存文件common~runtime.php,所以其效率上比调试模式高(原因:差了12个文件,将需要的配置压缩到了缓存文件里去了)

④经典面试:在生产模式下修改主配置文件(系统配置文件)/应用配置文件/函数库文件,是否会生效?

答:不会~~~,因为在生产模式下这些文件根本没有被加载,所以修改无效。如果想让其生效,有两种方法。

1.将缓存文件common~runtime.php删除掉,删除掉之后,下次刷新页面会重新生成,相当于重新加载上述三个文件;

2.将生产模式调回开发模式

⑤注意:因为跟踪信息和调试模式都会输出系统执行的相关信息,所以项目上线时应该关掉跟踪信息并开启生产模式

(3)sql调试

①简介:

因为ThinkPHP在执行CURD操作时是让开发者写方法,并不是直观的sql:此时想要调试则要利用sql调试。而sql调试方法在ThinkPHP中封装了调试方法getLastSql,由于该方法

是父类模型封装的,所以执行时需要用模型去调用方法。

②语法:$model->getLastSql()–小驼峰命名法

表示获取当前模型里成功执行的最后一条sql语句

③案例:使用getLastSql方法去获取最后一条成功执行的sql语句

public function sqlDebug(){

//实例化模型

$model=M(‘dept’);

//sql语句查询

$data=$model->select();//查询所有记录

//sql调试

$result=$model->getLastSql();

dump($result);//执行后输出–string(24)”SELECT*FROM`sp_dept`”

跟踪信息的SQL显示:

SHOW COLUMNS FROM`sp_dept`[RunTime:0.0050s]//翻译为熊sp_dept显示列,而且还在sql语句前输出,所以可以断定是表示模型实例化

SELECT*FROM`sp_dept`[RunTime:0.0000s]

④别名:因为getLastSql书写不便,所以在3.2版本之后起了个别名_sql,用法与之前一致。语法:$model->_sql();

(4)性能调试

之前写过测试代码执行时间的功能,一个代码开始执行时间和结束时间相减获得时间戳,然后计算出执行所耗时间,以此来测试性能。

在ThinkPHP中系统提供了性能测试的快速方法G。

目前所学过的快速方法:U(URL组装),D(实例化自定义模型),M(实例化父类模型),G(性能测试)

语法:如果第三个参数是数字,则表示统计代码的执行时间,数字表示精确的小数位数(单位:us微秒—1秒=1000毫秒=1000000微秒);若为字符m,则表示统计内存开销(单位:byt),这种需要 服务器 的支持

G(‘开始标记’)

//需要统计效率的代码段

G(‘结束标记’)

G(’开始标记’,’结束标记’,‘数字/字符’)

案例:使用G方法统计某段代码执行时间开销

public function test(){

//定义开始标记

G(‘start’);

//代码段

for($i=0;$i<100000;$i++){

//结束标记

G(‘stop’);

//开始统计,4表示精确到后4位小数

echo G(‘start’,’stop’,4);

测试后输出:0.0030,所以执行了0.0030秒

ThinkPHP—thinkphp实用项


thinkphp3.2 自动填充不成功是怎么回事

ThinkPHP 自动验证与自动填充无效可能的原因:自动验证与自动填充是在使用ThinkPHP时经常用到的功能,但偶尔会遇到自动验证与自动填充无效的情况,本文就ThinkPHP 自动验证与自动填充无效可能的原因做一些分析。 create()ThinkPHP 自动验证与自动填充是在创建数据对象 create() 时实现的,因此自动验证与自动填充无效很大程度上与 create() 有关。 create 方法语法如下:create(mixed data, string type)data 表示接受的数据,type 表示本次的具体操作(写入还是更新数据)。 两个参数都可省略,data 参数省略的情况下默认为接受 $_POST 数据,而 type 默认情况下由系统自动识别。 但系统自动识别 type 是有缺陷的,当传入的字段有主键字段时,系统就识别为更新操作,否则就是写入操作。 所以当主键字段非自动增长而是需要 SQL 写入时,那么自动验证和自动填充都可能无效。 例如添加数据记录时,如果表单中有主键字段或者系统中产生了主键字段(如录入设备编号),那么 ThinkPHP 就认为本次操作为更新操作,对于例如下面设定的自动验证和填充都会略过:protected $_validate = array(// 新增时验证标题唯一array(title,,标题已经存在!,0,unique,1), };// 自动填充protected $_auto = array(// 新增时填充时间戳array(pubtime,time,1,function),);尽管在操作中,执行了 add() 操作将数据写入了数据表,但这时会发现自动验证与自动填充无效。 出现这种情况时,只需将操作类型显式的传入 create() 方法即可,即 create($_POST,1),告诉系统本次操作为写入数据。 另外如果传入的数据不是 $_POST ,也要将数据当作参数传入,如 create($_GET)。 字段未对应由于粗心,未对应好表单字段与数据表字段。 数据表字段做了更改在开发过程中,更改了表字段名称,而缓存未及时更新,导致系统判断为无效字段而被 unset 掉。 所以在更改了表字段名称之后,及时将 Runtime/Data 下的数据表缓存清除。 Model 命名错误Model 命名错误,未严格按照规范命名,如头字母未大写或粗心导致字母顺序不对,多或少字母等。 这等错误往往会直接导致模型失效。 M 方法中使用自动验证与自动完成一般情况下,使用 M 方法实例化模型时,是无法实例化自定义模型类的,也就无法使用自动验证与自动完成功能,因此建议使用 D 方法来实例化模型类。 如果必须要在 M 方法中实现自动验证或自动完成,参看《ThinkPHP 使用M方法(不创建模型类)时实现自动验证与自动填充》。

thinkphp中,除了Home和addons模块,我想建立新的模块,该怎么建立?

自动生成模块目录从3.2.2版本开始,可以支持自动生成默认模块之外的模块目录以及批量生成控制器和模型类。例如,如果我们需要生成一个Admin模块用于后台应用,在应用入口文件中定义如下:// 绑定Admin模块到当前入口文件define(BIND_MODULE,Admin);define(APP_PATH,./Application/);require ./ThinkPHP/;

thinkphp中的add方法怎么获取sql错误消息?

thinkphp中的add方法获取sql错误消息可以调用getDbError()函数。 getDbError函数可以获取数据库的错误信息。 function GetRandomAd() { global $myDB; $today = date(j); $ql = SELECT * FROM reklama WHERE today<>$today OR realimprExecute($ql) or die(GetDbError($myDB->ErrorMsg())); $r_id = $result->Fields(aid); $r_ad_text = $result->Fields(ad_text); $r_today = $result->Fields(today); $result->Close(); if ($r_id) { if ($today != $r_today) $ql = UPDATE reklama SET realimpr=1, today=$today WHERE aid=$r_id; else$ql = UPDATE reklama SET realimpr=realimpr+1 WHERE aid=$r_id; $result = $myDB->Execute($ql) or die(GetDbError($myDB->ErrorMsg())); $result->Close(); } return $r_ad_text; }

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐