PHP CGI 和 CLI 详解

来自PHP百科全书
跳转至: 导航搜索

CLI模式

一、简介

1 cli及为php的命令行接口

2 命令行接口默认开启,可以在运行./configure编译的时候用参数--disable-cli进行屏蔽

3 CLI SAPI 不会将当前目录改为已运行的脚本所在的目录

二、命令行模式运行

1 在命令行直接运行 PHP 代码

[root@yunfei ~]# php -r 'echo "1111\n";'
1111

2 让 PHP 运行指定文件

[root@yunfei ~]# vim a.php
<?php
echo "aaa\n";
//end
[root@yunfei ~]# php a.php 
aaa

3 通过标准输入(stdin)提供需要运行的 PHP 代码

[root@yunfei ~]# cat a.php | php
aaa

运行结果与上面一致

4 把脚本当可执行文件执行

[root@yunfei ~]# vim b.php
#!/usr/local/php/bin/php
<?php
echo "bbb\n";
//end

保存文件,然后执行

[root@yunfei ~]# chmod +x b.php
[root@yunfei ~]# ./b.php 
bbb

三、输入与输出

1 流的输入输出

[root@yunfei ~]# vim c.php
<?php

$content = file_get_contents("php://stdin");//读取输入流
echo $content;//直接输出

fwrite(STDOUT, "stdout\n");//从输出流输出

fwrite(STDERR, "stderr\n");//从错误输出流输出

//end
[root@yunfei ~]# php c.php < a.php 
<?php
echo "aaa\n";
//end
stdout
stderr

2 参数的接收

[root@yunfei ~]# vim d.php
<?php
//脚本的文件名总是作为参数传递给当前脚本,因此$argc最少为1,$argv数组第0个元素永远都是脚本名
echo $argc,"\n";//参数的数量
print_r($argv);//接受到的参数数组
//end
[root@yunfei ~]# php d.php a b c
4
Array
(
    [0] => d.php
    [1] => a
    [2] => b
    [3] => c
)

包含d.php a b c一共四个,参数之间按空格分开

3 从命令行参数列表中获取选项

[root@yunfei ~]# vim e.php
<?php

$shortopts  = "";
$shortopts .= "f:";//必须项
$shortopts .= "v::";//可选项
$shortopts .= "abc";//不接受任何值

$longopts = array(
    "required:",//必须项
    "optional::",//可选项
    "option",//不接受值
    "opt"//不接受值
);

$options = getopt($shortopts, $longopts);//函数使详情请参见php文档

print_r($options);

//end
[root@yunfei ~]# php e.php -f "value of f" -v -a --required value --optional="optional value" --option
Array
(
    [f] => value of f
    [v] => 
    [a] => 
    [required] => value
    [optional] => optional value
    [option] => 
)

这就是我们设置的各个选项