PHP-Version

怎样在重构PHP项目时快速梳理代码执行流程

别来无恙 提交于 2019-12-05 20:55:16
最近在用Go重构一个PHP项目,代码写的有点乱,也没文档,没注释,总之就是功能基本靠猜, 然后我找了个小工具快速理清代码执行流程,帮助自己理解代码逻辑。 首先打开xdebug的分析器 xdebug.profiler_enable = 1 xdebug.profiler_output_dir = /tmp 分析器有什么用,有兴趣可以去 xdebug官网 自己去看。 但是xdebug分析器输出的内容对人是不友好的,使用工具才能方便的看到自己想要的,这里我们使用 webgrind 帮助我们查看这个内容。 webgrind依赖python和graphviz,安装完成之后修改webgrind的config.php文件 /** * Path to python executable */ static $pythonExecutable = '/usr/bin/python'; /** * Path to graphviz dot executable */ static $dotExecutable = '/usr/local/bin/dot'; 然后在webgrind目录下执行 php -S 127.0.0.1:19000 //使用php内置http服务器,php version >= 5.4 webgrind可以生成流程图和分析每个方法函数的执行时间

教你一招如何使用 php 父子进程坑人

不羁的心 提交于 2019-11-26 18:44:33
现在项目中大多都会使用MQ(消息队列)用来解耦和提升服务稳定性,然后都会面临一个问题,就是消息积压,解决这个问题除了提升处理消息的速度以外,另外就是多开些消费者进程,并发的消费数据。 如果是其他语言可以多开些线程或协程消费数据,但是这些东西,在 php 里并没有很好地支持,所以大家多采用多进程的方式来增加消费者,然后这里又有了两种方式,父子多进程和普通多进程。 然后这里就有了一个有趣的坑人方法,小小一技就能把人坑的想打你,那就是使用父子进程。 这是 php 使用父子进程的一个伪代码 $pid = pcntl_fork(); //父进程和子进程都会执行下面代码 if ($pid == -1) { //错误处理:创建子进程失败时返回-1. die('could not fork'); } else if ($pid) { //父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); //等待子进程中断,防止子进程成为僵尸进程。 } else { //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 } 那么怎么坑人呢? 坑人第一步,监听 signal //使用ticks需要PHP 4.3.0以上版本 declare(ticks = 1); //信号处理函数 function sig_handler($signo) { switch (