PHP cli:
PHP不仅可以在Web环境下运行,也可以脱离浏览器在命令行和系统后台环境下运行
PHP命令行界面(short for Command Line Interface,CLI)
PHP CLI可以在用Windows系统的命令提示符运行,也可以在Liunx/Unix或者Mac OS的终端环境下运行
CLI 安装:
在Windows系统下,当PHP软件包解压后,PHP所在的根目录(php.exe所在的文件夹)设置PATH,就可以在命令行中直接执行PHP
PHP CLI的配置参数:
(1)CLI默认以安静模式开始,不会输出任何HTTP头信息。
(2)在运行时,不会把工作目录改为脚本的当前目录(可以使用-C和-no-chdir参数来兼容CGI模式)。
(3)出错时输出纯文本的错误信息(非HTML格式)。
(4)CLI SAPI强制覆盖了php.ini中一些参数的设置:
·html_errors:CLI默认为False,不显示HTML格式错误。
·implicit_flush:CLI默认为True。
·max_execution_time:CLI默认为0(即没有超时限制)。
·register_argc_argv:CLI默认为True,即通过argc传递参数。
CLI命令行接口:
linux系统下,简单的php cli 脚本内容类似于下面的内容:
# !/usr/local/bin/php -q <?php echo "我是PHP cli输出的内容!" ?>
win系统下 第一行指定php.exe 位置 即可运行
#!c:\php\php.exe -q <?php echo "我是php cli输出的内容";?>
cli命令选项:
php [options] [-f] <file> [--] [args...]
php [options] -r <code> [--] [args...]
php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...]
php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...]
php [options] -S <addr>:<port> [-t docroot] [router]
php [options] -- [args...]
php [options] -a
[option]选项可以使用下面的参数:
-a 作为交互式shell运行
-c <path>|<file> 在此目录中查找php.ini文件
-n 将不使用任何配置(ini)文件
-d foo[=bar] 用值'bar'定义INI条目foo
-e 为调试器/分析器生成扩展信息
-f <file> 解析并执行 <file>.
-h 获取帮助
-i PHP信息
-l 仅语法检查 (lint)
-m 显示编译过的模块
-r <code> 在不使用脚本标签<?..?>的情况下运行PHP <?..?>
-B <begin_code> Run PHP <begin_code> 在处理输入行之前运行PHP
-R <code> Run PHP <code> 为每个输入行运行PHP
-F <file> Parse and execute <file> 解析并为每个输入行执行
-E <end_code> Run PHP <end_code> 处理所有输入行后运行PHP
-H 隐藏外部工具传递的所有参数
-S <addr>:<port> 用内置的Web服务器运行
-t <docroot> Specify document root <docroot> 为内置Web服务器指定文档根
-s 输出HTML语法突出显示的源
-v 版本号
-w 输出源,带注释和空格
-z <file> 加载Zend扩展名 <file>.
args...
参数传递给脚本。在第一个参数时使用-args
以-开头,或者从标准输入中读取脚本
--ini 显示配置文件名
--rf <name> 显示有关功能的信息 <name>.
--rc <name> 显示有关类的信息 <name>.
--re <name> 显示有关扩展名的信息 <name>.
--rz <name> 显示有关Zend扩展名的信息 <name>.
--ri <name> 显示扩展名的配置 <name>.
C:\Users\Administrator>php -v PHP 7.3.4 (cli) (built: Apr 2 2019 21:57:22) ( NTS MSVC15 (Visual C++ 2017) x64 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies C:\Users\Administrator>php -i phpinfo() PHP Version => 7.3.4 System => Windows NT XTZJ-2021XXASFT 10.0 build 19042 (Windows 10) AMD64 Build Date => Apr 2 2019 21:50:57 Compiler => MSVC15 (Visual C++ 2017)
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脚本头部第一行加入声明(类似于#!/usr/bin/php或PHP CLI解释器位置),
接着在命令行直接执行。这是CLI首选方法,建议采用。
1.执行一段代码
C:\Users\Administrator>php -r "echo 'hello cli';" hello cli
2.可交互的CLI界面
C:\Users\Administrator>php -a Interactive shell php > echo "hello world"; hello world php >
3.创建第一个cli脚本
myfile.php的PHP脚本,用于运行PHP CLI
#!/usr/local/bin/php –q <?php //Windows平台上,上行应该为:#!C:\php\php.exe -q echo "你好 PHP CLI!";?>
不要忘了给该文件设置为可执行的权限:
$ chmod 755 myfile.php
然后直接输入以下命令,按回车键即可以运行:
$ ./myfile.php
如果要在Windows系统下运行该脚本,则不需要设置文件属性,就可以直接运行该脚本。
C:\ >php myfile.php你好 PHP CLI!
如果在Windows平台,CLI脚本的第一行一定要写正确php.exe所在的位置,像这样(另外,如果要在CLI脚本中加注释语句,则要把注释写在PHP标签里面,因为CLI解释只认识第一行,不在PHP标签里被认为是语法错误):
#!C:\php\php.exe -q
这样,可以看到在命令行下信息已经打印出来,证明该CLI脚本已经成功运行。
4.从命令行上读取参数
如果想从命令行获取参数,CLI可以从$_SERVER['argc']和$_SERVER['argv'']取得参数的个数和值。我们再建立一个文件,名字为testargs.php,脚本代码如代码:
#!C:\php\php.exe –q <?php //UNIX和Linux平台下应该为#!/usr/local/bin/php –q echo "测试获取参数:\n"; echo $_SERVER["argc"]."\n"; //显示传入的参数值,从索引1开始显示 echo $_SERVER["argv"][1]."\n"; echo $_SERVER["argv"][2]."\n"; echo $_SERVER["argv"][3]."\n"; echo $_SERVER["argv"][4]."\n";?>
在命令行输入如下代码:
C:\Users\John>testargs.php Always To Be Best
测试获取参数:
4
Always
To
Be
Best
因为我们输入了一串单词,为“Always To Be Best”,脚本参数以空格分隔。因此,PHP将其计为4个参数,下面对此说明。
$_SERVER["argc"]数组返回一个整型的数,代表从命令行上回车后一共输入了几个参数。
从上例的结果已经看出,要访问已经传入的参数值,需要从索引1开始。因为脚本本身的文件已经占用了索引0,即$_SERVER["argv"][0]。
5.处理I/O通道
输入输出(I/O)通道这个思想来源于UNIX系统,UNIX系统提供3个文件句柄,用以从一个应用程序及用户终端发送和接收数据。
我们可以把一个脚本的输出重定向到一个文件:
php world.php > outputfile
如果是在UNIX系统下,也可以使用通道定向到另一个命令或应用程序中
php world.php | sort.
在PHP 5的CLI中,有一个文件流句柄,可以使用3个系统常量,分别为STDIN、STDOUT和STDERR。下面我们分别介绍。
(1)STDIN。
STDIN全称为standard in或standard input,标准输入可以从终端取得任何数据。
格式:stdin('php://stdin')
下面的例子是显示用户输入:
#!/usr/local/bin/php -q <?php $file = file_get_contents("php://stdin", "r"); echo $file;?>
这段代码的工作原理与cat命令很相似,回转提供给它的所有输入。但是,这时它还不能接收参数。
STDIN是PHP的标准输入设备,利用它,CLI PHP脚本可以做更多的事情。
内置服务器:
php大于5.4版本,-S和-t选项,表示支持内置服务器
切换到包括我们想要测试的目录:
cd /var/www/dev.21cto.com/clitest
启动测试Web服务器:
php –S localhost:8000
如果你想更完美点,还可以加上IP地址
Php –S 115.28.174.91:8000