PHP
使用Xdebug深入调试PHP
Xdebug功能简介
Xdebug是PHP的一个插件(zend_extension)。主页:http://www.xdebug.org/。它提供大供php的调试信息。主要包含以下内容:
在错误信息中提供 层级跟踪 并且 功能跟踪。
为用户定义的函数展现全部参数
展现函数名,文件名,代码行数
支持成员函数
内存分配
防止死循环
PHP脚本的概况分析
代码覆盖范围分析
能够通过客户端软件调试PHP脚本
其中1,2,3是Xdebug默认提供的功能。只要启用了Xdebug就可以使用了。
如何使用PHP脚本的概况分析功能?
xdebug.profiler_enable 设为On,默认为Off
linux下的time 命令
time命令在测试程序效率的时候很有用,也很方便。
它以秒为单位将一条命令执行期间所用的时间、系统时间和 time 命令的执行时间打印在标准错误中。
例如:
说明
执行命令行”command [arguments...]“,命令行执行结束时在标准输出中打印执行该命令行的时间统计结果,其统计结果包含以下数据:
1)实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;
2)用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;
3)系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。
其中,用户CPU时间和系统CPU时间之和为CPU时间,即命令占用CPU执行的时间总和。实际时间要大于CPU时间,因为Linux是多任务操作系统,往往在执行一条命令时,系统还要处理其它任务。
另一个需要注意的问题是即使每次执行相同命令,但所花费的时间也是不一样,其花费时间是与系统运行相关的。
例1:
1. # time date
2. Sun Mar 26 22:45:34 GMT-8 2006
3.
4. real 0m0.136s
5. user 0m0.010s
6. sys 0m0.070s
7. #
在例1中,执行命令”time date”(见第1行)。系统先执行命令”date”,第2行为命令”date”的执行结果。第3-6行为执行命令”date”的时间统计结果,其中第4 行”real”为实际时间,第5行”user”为用户CPU时间,第6行”sys”为系统CPU时间。以上三种时间的显示格式均为 MMmNN[.FFF]s。
在例1中,CPU时间 = 用户CPU时间 + 系统CPU时间 = 0m0.010s + 0m0.070s = 0m0.080s,实际时间大于CPU时间,说明在date命令运行的同时,还有其它任务在运行.
time命令还可以拿测试php等脚本效率。
例如:time php test.php
如何在CAKEPHP应用中嵌套另一个CAKEPHP应用 – TAPD3新版本的部署方案
我们的tapd3新版本(一个CAKEPHP应用)要发布了,但是由于某原因不能代替现有的老版本(另一个CAKEPHP应用)。两个版本必须并存。但域名只有一个(tapd3.oa.com),并且已经被老版本占用着。
那么我们的tapd3新版本只能挂tapd3.oa.com的一个目录下了,目录就暂定为tapd3.oa.com/beta/吧。这样,访问http://tapd3.oa.com/beta时就是访问新版本,访问http://tapd.oa.com的话还是以前的老版本。
方案定下来了,动手进行配置。
注:下文出现的TAPD3_ROOT表示tapd3老版本(一个CAKEPHP应用)的根目录。
1.了解现有的设置:
服务器: apache
配置有虚拟主机:tapd3.oa.com;其DocumentRoot为TAPD3_ROOT/app/webroot;此目录已经打开AllowOverRide
2.设置虚拟主机的DocumentRoot.
把虚拟主机:tapd3.oa.com的DocumentRoot设为TAPD3_ROOT,这个并没有任何影响,效果跟值为TAPD3_ROOT/app/webroot时一样的。因为默认下CAKEPHP的根目录有这样的一个.htaccess文件。
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteRule (.*) app/webroot/$1 [L]
这个文件的作用是把当前目录下的所有请求重定向到app/webroot/下面。
3.放入代码。
先把tapd3新版本的代码checkout一份到TAPD3_ROOT目录下(跟config/ controller/ model/ view/ 目录同一级),并以bata命名。
4.修改TAPD3_ROOT目录下的.htaccess文件。
如果Apache没有作其它配置的话,访问http://tapd3.oa.com/beta/时,请求数据应该就会到beta这个目录下面去找。但是CAKEPHP根目录,也就是我们的TAPD3_ROOT目录下面存在着第2步所说的这个.htaccess文件。把http://tapd3.oa.com/beta/这个请求的服务器数据路径被重定向到app/webroot下面去了,以致不能达到我们想要的效果。
这里要改动一下这个.htaccess文件,使访问http://tapd3.oa.com/beta/时,服务器还是去beta目录去查找数据。改变后的.htaccess文件如下:
RewriteEngine on
RewriteRule ^$ app/webroot/ [L]
RewriteCond ${REQUEST_URI} !beta //这句表示请求uri不等于beta时,下面的重写命令才生效。
RewriteRule (.*) app/webroot/$1 [L]
大功做成!
访问http://tapd3.oa.com还是原来的CAKEPHP应用;
访问http://tapd3.oa.com/bata/就是新的CAKEPHP应用啦。
顶!Yahoo开发者中心推荐的PHP网站
很多好东西,一定要定阅啊!
General Information Links
www.php.net : Sector Zero-Zero of PHP — the place to find definitive PHP documentation and news.
PHP Builder : A popular site with many PHP tutorials and code samples.
Sitepoint : Makers of fine books and tutorials on PHP and other Web development tools.
O’Reilly and Associates : Publishers of many of the best books on [...]
