php cli模式的一些"坑"

看下cli模式好使不
命令行下运行 php -r "echo php_sapi_name();"
这条命令就是在cli模式运行php语句,php -r就是run一条php命令的意思,php_sapi_name()判断当前执行的php是什么模式下,执行成功在屏幕上输出 cli,不成功说明你的php cli模式有问题。

1第1个坑:Mysql连不上

命令行的ini路径:

E:\x\pwashop2>php --ini
Configuration File (php.ini) Path: C:\Windows
Loaded Configuration File:         E:\x\wamp\bin\php\php-5.4.35-Win32-VC9-x86\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)
网页phpinfo();返回的路径:

Configuration File (php.ini) Path 	C:\Windows
Loaded Configuration File 	E:\x\wamp\bin\apache\apache2.2.17\bin\php.ini
Scan this dir for additional .ini files 	(none)
Additional .ini files parsed 	(none) 

我是直接把E:\x\wamp\bin\php\php-5.4.35-Win32-VC9-x86\php.ini里面的扩展打开就可以了,并且将ext/扩展包移到了c盘(会提示缺少扩展文件)下面。

这个问题网上很多人说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和浏览器的一致了。(或者直接把网页用的php.ini直接拷贝覆盖到命令行cli用的php.ini,但这样可能会导致一些扩展库路径不正确而报错)


2第2个坑:相对路径
cli模式执行php文件就像这样:php /home/wwwroot/test.php
需要用文件的绝对路径,你的php文件中的include、require之流也要用绝对了。类似include("../xxx.php") 肯定要完蛋,因为这时的 .. 上级目录指的是当前命令行所在目录的上级,而且也没有网站根目录的概念了。不过我发现不带点的同级相对路径 include("xxx.php") 还是好使的。


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


然后就没什么大坑了,一些变量比如 $_SERVER['HTTP_HOST'] 肯定没了,$_SERVER['PHP_SELF'] 也变成了文件绝对路径。用了几天发现cli模式确实爽,够稳定,占用资源也少,回头把爬虫全搞成cli模式!



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值