php基础(07):开发工具和调试方法

本文介绍了PHP开发中常用的工具,包括IDE、服务器组件、数据库管理工具等,并详细讲解了PHP调试方法,如使用xdebug扩展及Linux命令进行性能分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.常用开发工具

(1) PHP IDE :phpstorm, zend studio,推荐phpstorm

(2) PHP服务器组件: phpStudy、XAMPP,推荐phpStudy

(3) MySql管理工具:Navicat for Mysql、PhpMyAdmin ,推荐Navicat

(4) 文本编辑器 : sublime, editplus

(5) 代码版本管理 :github,gitee

(6) 远程连接工具:SecureCRT+SecureFX, xshell, ftp

(7) 代码部署工具 :Spug,walle(瓦力)

(8) 接口调试工具:postman

(9) 抓包工具 : whistle, fiddler

(10) 在线文档:石墨文档,为知笔记

2.php调试方法

(1)最古老的方法---文件输出,写入日志

//输出变量或数组到文件
$fp = fopen('./php.log', '测试');
fwrite($fp, print_r($content, true));
fclose($fp);
 
//输出对象到文件
file_put_contents("/php.log", var_export($objects,true), FILE_APPEND);
 
//一般开发框架都有记录日志的封装,直接调用就行

(2) PHP扩展----xdebug (本地),xhprof(线上)

安装xdebug扩展

下载对应版本安装:http://www.xdebug.org/download.php

编辑php.ini,加入下面几行

zend_extension=D:\xampp\php\ext\php_xdebug.dll   (Win)

zend_extension= /usr/lib/php5/20090626+lfs/xdebug.so (Linux)

xdebug.profiler_enable=on

xdebug.trace_output_dir="../Projects/xdebug"

xdebug.profiler_output_dir="../Projects/xdebug"  // 你想要放置Xdebug输出的数据文件的目

重启,查看phpinfo()是否带有xdebug模块,php -m  查看输出信息即可知道是否成功

3. linux 命令 - 只能分析CLI执行的PHP程序

除了使用xdebug或者xhprof等PHP扩展分析PHP程序之外,我们还可以使用linux的命令对PHP程序进行分析。当然,这样也有一定缺陷,就是只能分析CLI执行的PHP程序。

以下是将要分析的PHP脚本

  1. <?php  
  2. $num="1800";  
  3. $arr = array();  
  4. for($i=0;$i<20000;$i++){  
  5.         $arr[]= "{$i}";  
  6. }  
  7. sleep(5);  
  8. for($i=0;$i<3000;$i++){  
  9.         if(in_array($num,$arr)){  
  10.                 continue;  
  11.         }  
  12. }  

第一个命令:time:

解析:linux下time命令可以获取到一个程序的执行时间,包括程序的实际运行时间(real time),以及程序运行在用户态的时间(user time)和内核态的时间(sys time)。

  1. -bash-4.1# time php test.php   
  2.   
  3. real   0m5.675s    #实际时间(real time): 从command命令行开始执行到运行终止的消逝时间;  
  4. user    0m0.665s    #用户CPU时间(user CPU time): 命令执行完成花费的用户CPU时间,即命令在用户态中执行时间总和;  
  5. sys     0m0.007s    #系统CPU时间(system CPU time): 命令执行完成花费的系统CPU时间,即命令在核心态中执行时间总和。  

可以看到,sleep的5秒并没有占用到user和sys,也就是说,sleep并不占用cpu 

第二个命令:strace

解析:strace常用来跟踪进程执行时的系统调用和所接收的信号。在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

执行命令:

  1. strace -ttt -o strace_result  php test.php  

-ttt  参数表示微秒级输出,以秒了表示时间

-o   参数表示将结果输出到文件中

  1. 1443442345.373206 munmap(0x3915200000, 2276448) = 0  
  2. 1443442345.373250 munmap(0x7f24a0f34000, 2347568) = 0  
  3. 1443442345.373291 munmap(0x7f24a0bf6000, 3397480) = 0  
  4. 1443442345.373334 munmap(0x3914600000, 2275920) = 0  
  5. 1443442345.373374 munmap(0x7f24a07ed000, 2113912) = 0  
  6. 1443442345.373434 munmap(0x7f24a09f2000, 2109776) = 0  
  7. 1443442345.373474 munmap(0x3914a00000, 2346240) = 0  
  8. 1443442345.373516 munmap(0x3917e00000, 2201520) = 0  
  9. 1443442345.374489 munmap(0x7f24a158a000, 323584) = 0  
  10. 1443442345.374622 exit_group(0)         = ?  

输出结果中,每一行都是一个系统调用。

第三个命令:ltrace

解析:ltrace命令用来跟踪进程调用库函数的情况

  1. -bash-4.1# ltrace -c php test.php  
  2. ^C% time     seconds  usecs/call     calls      function  
  3. ------ ----------- ----------- --------- --------------------  
  4.  55.32   97.979893         233    419223 strtol  
  5.  30.04   53.213711    53213711         1 __libc_start_main  
  6.   9.19   16.272251         305     53287 memcpy  
  7.   3.17    5.621030         279     20107 __ctype_b_loc  
  8.   1.74    3.074011         229     13392 malloc  
  9.   0.12    0.217684          83      2618 strlen  
  10.   0.12    0.205593       18690        11 dlopen  
  11.   0.11    0.194501          79      2445 __ctype_tolower_loc  
  12.   0.06    0.111315          82      1351 strrchr  
  13.   0.02    0.043957          80       545 calloc  
  14.   0.02    0.042310          81       521 free  
  15.   0.02    0.039427          83       475 strcasecmp  
  16.   0.01    0.025975          79       327 realloc  
  17.   0.01    0.022132       11066         2 getprotobyname  
  18.   0.01    0.016168          81       199 memset  
  19.   0.00    0.006055          82        73 strncasecmp  
  20.   0.00    0.004099          87        47 strchr  
  21.   0.00    0.003631          80        45 fileno  

上面列出系统函数的调用次数和执行时间,其中发现strtol调用了40w多次。进行优化时,可以考虑从这方向去入手。

strtol是将字符串转化成long型,在代码中,仅有in_array这个函数实现这个操作(由于使用非严格匹配,in_array如果参数可以转化成int类型,会使用int类型进行比较)

简单修改了一下代码:if(in_array($num,$arr,true)){

再次执行:

  1. % time     seconds  usecs/call     calls      function  
  2. ------ ----------- ----------- --------- --------------------  
  3.  29.58   11.395604    11395604         1 __libc_start_main  
  4.  26.64   10.263876         192     53293 memcpy  
  5.  19.79    7.623026         379     20108 __ctype_b_loc  
  6.  13.17    5.075651         378     13393 malloc  
  7.   8.12    3.129727         223     14009 free  
  8.   0.83    0.319670          83      3832 strlen  
  9.   0.53    0.203854       18532        11 dlopen  
  10.   0.50    0.194224          79      2445 __ctype_tolower_loc  

可以看到程序执行的时间大大缩短了。

4.其他开源工具:

360的:Phptrace  // https://github.com/Qihoo360/phptrace

Phptrace是一种用于PHP的低开销跟踪工具。它可以跟踪运行时所有的PHP执行、函数调用、请求信息.并提供过滤器、统计、当前状态等功能。在所有环境中,特别是在生产环境中,查找阻塞、重载问题和调试非常有用

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值