计算机网络/计算机科学与应用/系统/运维/开发

PHP 命令行

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



所谓坚持,就是从种子种下到开花结果需要等待的时间。

评论

^