PHP 命令行 CLI

| 选择喜欢的代码风格  

CLI PHP 编程非常强大,可以直接调用你自己的程序代码而无需创建 Web 图形界面,需要注意的是 不要 把 CLI PHP 脚本放在公开的 web 目录下!

在命令行下运行 PHP:

> php -i

选项 -i 将会打印 PHP 配置,类似于 phpinfo() 函数。

选项 -a 提供交互式 Shell,和 Ruby 的 IRB 或 Python 的交互式 Shell 相似,此外还有很多其他有用的命令行选项。

接下来写一个简单的 “Hello, $nameCLI 程序,先创建名为 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!

使用CLI参数


除了用命令行传递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());
?>

PHP 扩展阅读:




发表评论