php cli模式
本来我的小爬虫在apache环境下set_time_limit(0) 就可以24小时不断爬,最近部署到nginx环境下就不灵了,各种504 timeout。所以干脆cli模式走起吧!
手册:http://php.net/manual/zh/features.commandline.php
我的环境:Ubuntu 10.04 + php 5.2
0、看下cli模式好使不
命令行下运行 php -r 'echo php_sapi_name()."\n";'
这条命令就是在cli模式运行php语句,php -r就是run一条php命令的意思,php_sapi_name()判断当前执行的php是什么模式下,执行成功在屏幕上输出 cli,不成功说明你的php cli模式有问题。
1、第1个坑:相对路径
cli模式执行php文件就像这样:php /home/wwwroot/test.php
需要用文件的绝对路径,你的php文件中的include、require之流也要用绝对了。类似include("../xxx.php") 肯定要完蛋,因为这时的 .. 上级目录指的是当前命令行所在目录的上级,而且也没有网站根目录的概念了。不过我发现不带点的同级相对路径 include("xxx.php") 还是好使的。
喜欢
回应 推荐 喜欢 只看楼主
老袁
老袁 (蹭) 2013-10-18 21:53:20
2、第2个坑:Mysql连不上
这个问题网上很多人说cli模式没加载php.ini,或者加载的和普通模式的不一样。用php --ini可以查看,我的是/etc/php5/cli/php.ini,而通过浏览器phpinfo() 看到的是 /usr/local/php/etc/php.ini,果然不一样。
不过我感觉真正的问题在于php命令对应的执行文件和普通模式运行的php不是一个文件。运行which php,得到一个文件路径 /usr/bin/php,通常这是一个软链接,运行ls -li /usr/bin/php 可以看到它的源文件,源文件可能也是一个链接文件,就一直ls -li,直到找出最终文件,我的是/usr/bin/php5,而普通CGI模式运行的是 /usr/local/php/bin/php。用ln -s把最后一个软链接的源文件设为普通模式运行的那个,这时再运行 php --ini发现载入的php.ini和浏览器的一致了。
赞 回应
老袁
老袁 (蹭) 2013-10-18 21:57:33
然后就没什么大坑了,一些变量比如 $_SERVER['HTTP_HOST'] 肯定没了,$_SERVER['PHP_SELF'] 也变成了文件绝对路径。用了几天发现cli模式确实爽,够稳定,占用资源也少,回头把爬虫全搞成cli模式!
赞 回应
老袁
老袁 (蹭) 2013-11-27 08:57:55
3、第3个坑:后台运行
在命令行直接php 运行脚本,如果运行的是长时间任务,那么切出光标脚本就停止了。既然我们用cli模式就是要干长时间的活,所以一定要用后台运行格式:nohup php /home/wwwroot/test.php & ,运行后屏幕会显示进程pid,这时要按Enter切出光标,按别的进程就停了。
查看所有后台运行的cli 进程: ps aux | grep '[ ]php' ,网上很多文章都只写ps,在我的机器上用ps只能看到刚刚运行的进程,过一段时间后就看不到了。停止进程就kill 相应的pid,如果脚本有输出的话,nohup运行的所有输出都在nohup.out 文件中,可以用tail或vi查看它 tail -f nohup.out
赞 回应
老袁
老袁 (蹭) 2014-03-07 09:12:01
没人关心。。。
赞 回应
有天你能看到
有天你能看到 (希望有一天和你再见,我爱你) 2014-04-15 20:26:48
有阿
赞 回应
ImN1
ImN1 2014-04-16 16:54:53
有,不怎么爱打字,cli 偶用了很多年了,我最早的爬虫就是用php cli做parse的
赞 回应
✪_✪
✪_✪ (举头三尺有神明) 2014-04-16 17:06:08
php cli 也用了很久了,一直很稳定。我们是用 supervisor 来做进程管理的,非常好用。
赞 回应
老袁
老袁 (蹭) 2014-04-16 17:21:37
有,不怎么爱打字,cli 偶用了很多年了,我最早的爬虫就是用php cli做parse的 ImN1
嗯,我也是写爬虫,我还用web界面管理cli进程
赞 回应
老袁
老袁 (蹭) 2014-04-16 17:22:29
php cli 也用了很久了,一直很稳定。我们是用 supervisor 来做进程管理的,非常好用。 ✪_✪
我用web管理。。。用web来启动cli进程可能不大安全吧,反正是本地的爬虫机
赞 回应
✪_✪
✪_✪ (举头三尺有神明) 2014-04-16 17:24:30
我用web管理。。。用web来启动cli进程可能不大安全吧,反正是本地的爬虫机 老袁
web 启动也做过,ignore_user_abort 采集QQ签名和微博,就是管理调试起来略麻烦。
现在做的是恶意网址后台扫描。
我要提问