CLI PHP 编程非常强大,可以直接调用你自己的程序代码而无需创建 Web 图形界面,需要注意的是 不要 把 CLI PHP 脚本放在公开的 web 目录下!
在命令行下运行 PHP:
> php -i
选项 -i
将会打印 PHP 配置,类似于 phpinfo() 函数。
选项 -a
提供交互式 Shell,和 Ruby 的 IRB 或 Python 的交互式 Shell 相似,此外还有很多其他有用的命令行选项。
接下来写一个简单的 “Hello, $name
” CLI 程序,先创建名为 hello.php 的脚本:
<?php if($argc != 2) { echo "Usage: php hello.php [name].\n"; exit(1); } $name = $argv[1]; echo "Hello, $name\n";
PHP 会在脚本运行时根据参数设置两个特殊的变量,$argc 是一个整数,表示参数个数,$argv 是一个数组变量,包含每个参数的值, 它的第一个元素一直是 PHP 脚本的名称,如本例中为 hello.php
。
命令运行失败时,可以通过 exit()
表达式返回一个非 0 整数来通知 Shell,常用的 exit 返回码可以查看列表.
运行上面的脚本,在命令行输入:
> php hello.php Usage: php hello.php [name] > php hello.php world Hello, world
<?php print_r($argv); ?>
#output: D:\>\wamp\bin\php\php5.3.0\php.exe \tools\index.php bac ddd Array ( [0] => \tools\index.php #第一个自变量总是脚本自己的名称 [1] => bac [2] => ddd )
正如你可以从输出的结果看到的,传递给 index.php 的值会自动地作为数组元素出现在 $argv
里。要注意的是,$argv
的第一个自变量总是脚本自己的名称。
PHP CLI会定义三个常量,以便让在命令行提示符下与解释器进行交互操作更加容易。这些常量见下表
# | 常量 | 说明 |
---|---|---|
1 | STDIN | 标准的输入设备 |
2 | STDOUT | 标准的输出设备 |
3 | STDERR | 标准的错误设备 |
你可以在自己的PHP脚本里使用这三个常量,以接受用户的输入,或者显示处理和计算的结果。
<?php // ask for input fwrite(STDOUT, "Enter your name: "); // get input $name = trim(fgets(STDIN)); // write input back fwrite(STDOUT, "Hello, $name!"); ?> output:
在这个脚本里,fwrite()
函数首先会向标准的输出设备写一条消息,询问用户的姓名。然后它会把从标准输入设备获得的用户输入信息读取到一个 PHP 变量里,并它把合并成为一个字符串。然后就用 fwrite()
把这个字符串打印输出到标准的输出设备上。
D:\>\wamp\bin\php\php5.3.0\php.exe \tools\index.php Enter your name: kkk Hello, kkk!
除了用命令行传递PHP脚本参数,还可以传递 PHP CLI 参数以更改其工作方式。
#参数 说明 -a 交互式运行Run interactively -c path 从path读取php的.ini文件 -n 不用读取php的.ini文件就直接运行 -m 列出经过编译的模块 -i 显示有关PHP构建的信息 -l 检查PHP脚本的句法 -s 以彩色方式显示源代码 -w 显示去掉注释之后的源代码 -h 显示帮助
你还可以以交互方式使用 PHP CLI,也就是输入命令,马上获得结果。
要得到这种效果,只需要使用一个参数调用 CLI 可执行文件就行了,就像下面这样:
shell> /path/to/php -a Interactive mode enabled <?php echo mktime(); 1121187283 echo 2+2; 4 exit(); shell>
或者,你可以不使用 -a
参数就调用CLI可执行文件,直接输入完整的脚本或者代码段。
用 Ctrl -D 来结束代码段,并让CLI来执行它。见下面的例子:
shell> /path/to/php <?php echo date("d-M-Y h:i:s", time()); ?>