最近学习一些PHP在CLI中的开发,把自己一些学习心得和大家分享。

PHP CLI模式开发不需要任何WEB服务器(包括Apache或MS IIS等),这样,CLI可以运行在各个场合。有两种方式可以运行PHP CLI脚本。

第一种方法是使用 php -f /path/to/yourfile.php,调用PHP CLI解释器,并给脚本传递参数。这种方法首先要设置php解释器的路径,Windows平台在运行CLI之前,需设置类似 path c:php的命令,也失去了CLI脚本第一行的意义,因此不建议使用该方法。

第二种方法是首先运行 chmod+x<要运行的脚本文件名>(UNIX/Linux环境),将该PHP文件置为可执行权限,然后在CLI脚本头部第一行加入声明(类似于#!/urs/bin/php或PHP CLI解释器位置),接着在命令行直接执行,这是CLI首选方法,建议使用。

下面我们看看怎么编写PHP CLI脚本。

1. 首先创建一个名为 myfile.php 的PHP脚本,用于运行 PHP CLI 。该脚本很简单,仅仅显示“你好 PHP CLI!”。该脚本代码如下:
#!/usr/local/bin/php -q

不要忘了给该文件设置为可执行的权限:
$ chmod 755 myfile.php
然后直接输入以下命令,按回车键即可以运行:
$ ./myfile.php
如果要在Windows系统下运行该脚本,则不需要设置文件属性,可以直接运行该脚本。
C: >myfile.php
你好 PHP CLI!
如果在Windows平台,CLI脚本的第一行一定要写php.exe 所在的正确位置(另外,如果要在CLI脚本中加注释语句,则要把注释写在PHP标签里面,因为CLI解释只认识第一行,不在PHP标签里认为是语法错误),如下:
#!C:phpphp.exe -q
这样,可以看到在命令行下信息已经打印出来,证明该CLI脚本已经成功运行。

2. 从命令行上读取参数

如果想从命令行获取参数,CLI 可以从$_SERVER[‘argc’]和$_SERVER[‘argv’]取得参数的个数和值。我们再建立一个文件,名字为testargs.php,脚本代码如下:
#! C:phpphp.exe -q

在命令行输入如下代码:
C:Usersljgtestargs.php Always To Be Best
测试获取参数:
4
Always
To
Be
Best
因为我们输入了一串单词,为“Always To Be Best”, 脚本参数以空格分隔。因此,PHP将其计为4个参数,下面对此说明。
$_SERVER[‘argc’]数组返回一个整型的数,代表从命令行上回车后一共输入了几个参数。

从上面例子的结果可以看出,要访问已经传入的参数值,需要从索引1开始。因为脚本本身的文件已经占用了索引0,即$_SERVER[‘argv’][0]。

3. 处理I/O通道

PHP最初设计不是用来与用户直接的键盘输入或文本输入结合使用。了解这一点至关重要,因为如果需要在命令行中执行任何操作,都必须能够与用户来回通信。
输入输出(I/O)通道这个思想来源于UNIX系统,UNIX系统提供了3个文件句柄,用以从一个应用程序以及用户终端发送和接收数据。分别是:STDIN、STDOUT、STDERR。这里不对这三个句柄做详细的解释,大家可以参考相关资料。

4. 后台运行CLI

如果正在运行一个进程,而且在退出帐户时该进程还不会结束,即在系统后台或背景下运行,那么就可以使用nohup命令。该命令可以在退出帐户之后继续运行相应的进程。

nohup 在英文中就不挂起的意思。该命令的一般形式为:
nohup -f scriptnam.php &
使用nohup命令提交作业,在默认情况下该作业的所有输出都被重定向到一个名为nohup.php 的文件中,除非另外指定了输出文件。

nohup scriptnam.php > log.txt &
这样,PHP CLI 脚本执行后的结果将输出到log.txt中,我们可以使用tail命令查看该内容:
tail -n50 -f log.txt