PHP做为一门web开发语言,一般状况下咱们都是在Web Server中运行PHP,使用浏览器访问,所以不多关注其命令行操做以及相关参数的使用,可是,特别是在类Unix操做系统上,PHP能够做为一门脚本语言执行与shell
相似的处理任务。php
查看PHP的全部命令行参数,使用php -h
命令。咱们将会对大部分经常使用的命令行参数进行一一解释,以加深对PHP能力的认识,更加快捷的在服务端命令行下使用PHP或者调试各类由于对环境不熟悉而出现的问题。html
-a 以交互式shell模式运行 -c <path>|<file> 指定php.ini文件所在的目录 -n 指定不使用php.ini文件 -d foo[=bar] 定义一个INI实体,key为foo,value为'bar' -e 为调试和分析生成扩展信息 -f <file> 解释和执行文件<file>. -h 打印帮助 -i 显示PHP的基本信息 -l 进行语法检查 (lint) -m 显示编译到内核的模块 -r <code> 运行PHP代码<code>,不须要使用标签 <?..?> -B <begin_code> 在处理输入以前先执行PHP代码<begin_code> -R <code> 对输入的没一行做为PHP代码<code>运行 -F <file> Parse and execute <file> for every input line -E <end_code> Run PHP <end_code> after processing all input lines -H Hide any passed arguments from external tools. -S <addr>:<port> 运行内建的web服务器. -t <docroot> 指定用于内建web服务器的文档根目录<docroot> -s 输出HTML语法高亮的源码 -v 输出PHP的版本号 -w 输出去掉注释和空格的源码 -z <file> 载入Zend扩展文件 <file>. args... 传递给要运行的脚本的参数. 当第一个参数以`-`开始或者是脚本是从标准输入读取的时候,使用`--`参数 --ini 显示PHP的配置文件名 --rf <name> 显示关于函数 <name> 的信息. --rc <name> 显示关于类 <name> 的信息. --re <name> 显示关于扩展 <name> 的信息. --rz <name> 显示关于Zend扩展 <name> 的信息. --ri <name> 显示扩展 <name> 的配置信息.
上面列出了PHP命令全部的参数及其注释,接下来,咱们将对其中比较经常使用的参数举例说明。python
用过 Python 的朋友对Python的交互式shell比较熟悉,在命令行下,若是咱们直接输入python
命令,则会进入python
的交互式shell程序,接下来就能够交互式的执行一些计算任务。web
在PHP命令行中,一样提供了相似的功能,使用-a
参数便可进入交互shell模式。redis
在该shell中,咱们能够执行一些简单的任务,而不须要老是新建一个php文件。shell
更详细的使用说明,请参考官方文档api
从PHP 5.4.0
开始,PHP的命令行模式提供了一个内建的web服务器。使用-S
开始运行web服务。数组
假设当前咱们处在目录/Users/mylxsw/codes/php/aicode/demo
,在该目录中,存在index.php
文件。浏览器
$ ls index.php $ cat index.php <?php echo "Hello, PHPER!";
在该目录中,执行如下命令能够启动内建web服务器,而且默认以当前目录为工做目录服务器
$ php -S localhost:8000 PHP 5.6.3 Development Server started at Wed Jun 10 15:49:41 2015 Listening on http://localhost:8000 Document root is /Users/mylxsw/codes/php/aicode/demo Press Ctrl-C to quit.
咱们另外开启一个shell窗口,请求http://localhost:8000/
便可看到脚本输出
$ curl -is http://localhost:8000/ HTTP/1.1 200 OK Host: localhost:8000 Connection: close X-Powered-By: PHP/5.6.3 Content-type: text/html; charset=UTF-8 Hello, PHPER!
在web服务运行的窗口,能够看到输出的日志信息
以上咱们在启动内建服务器的时候,只指定了-S
参数让PHP以web服务器的方式运行,这时,PHP会使用当前目录做为工做目录,所以回到当前目录下寻找请求的文件,咱们还可使用-t
参数指定其它的目录做为工做目录(文档根目录)。
更多详细信息,请参考官方文档。
在有的时候,因为服务器上软件安装比较混乱,咱们可能安装了多个版本的PHP环境,这时候,如何定位咱们的PHP程序使用的是那个配置文件就比较重要了。在PHP命令行参数中,提供了--ini
参数,使用该参数,能够列出当前PHP的配置文件信息。
$ php --ini Configuration File (php.ini) Path: /usr/local/etc/php/5.6 Loaded Configuration File: /usr/local/etc/php/5.6/php.ini Scan for additional .ini files in: /usr/local/etc/php/5.6/conf.d Additional .ini files parsed: (none) $ /usr/local/php/bin/php --ini Configuration File (php.ini) Path: /usr/local/php/etc/ Loaded Configuration File: /usr/local/php/etc/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none)
上述的服务器上咱们安装了两个版本的PHP,由上能够看到,使用php --ini
命令能够很方便的定位当前PHP命令将会采用哪一个配置文件。
一般,咱们可使用php --info
命令或者在在web服务器上的php程序中使用函数phpinfo()
显示php的信息,而后再查找相关类、扩展或者函数的信息,这样作实在是麻烦了一些。
$ php --info | grep redis redis Registered save handlers => files user redis This program is free software; you can redistribute it and/or modify
咱们可使用下列参数更加方便的查看这些信息
--rf <name> 显示关于函数 <name> 的信息. --rc <name> 显示关于类 <name> 的信息. --re <name> 显示关于扩展 <name> 的信息. --rz <name> 显示关于Zend扩展 <name> 的信息. --ri <name> 显示扩展 <name> 的配置信息.
例如,咱们但愿查看扩展redis
的配置信息
$ php --ri redis redis Redis Support => enabled Redis Version => 2.2.7
查看redis
类的信息
$ php --rc redis Class [ <internal:redis> class Redis ] { - Constants [19] { Constant [ integer REDIS_NOT_FOUND ] { 0 } ... - Methods [201] { ... Method [ <internal:redis> public method echo ] { } ...
查看函数printf
的信息
$ php --rf printf Function [ <internal:standard> function printf ] { - Parameters [2] { Parameter #0 [ <required> $format ] Parameter #1 [ <optional> ...$args ] } }
有时候,咱们只须要检查php脚本是否存在语法错误,而不须要执行它,好比在一些编辑器或者IDE中检查PHP文件是否存在语法错误。
使用-l
(--syntax-check
)能够只对PHP文件进行语法检查。
$ php -l index.php No syntax errors detected in index.php
假如此时咱们的index.php中存在语法错误
$ php -l index.php PHP Parse error: syntax error, unexpected 'echo' (T_ECHO) in index.php on line 3 Parse error: syntax error, unexpected 'echo' (T_ECHO) in index.php on line 3 Errors parsing index.php
在使用PHP开发命令行脚本的时候,与开发web程序是明显不一样的,在web程序中,咱们能够经过改变url的参数,为PHP环境提供不一样的输入,可是在命令行脚本程序中如何获取外部的输入呢?
在使用C语言开发程序时,咱们一般会在main函数中提供两个可选的参数int main(int argc, char *argv[])
,这两个参数就是从命令行提供的输入参数。在PHP中,提供了两个全局变量$argc
和$argv
用于获取命令行输入。
$argc
包含了 $argv
数组包含元素的数目$argv
是一个数组,包含了提供的参数,第一个参数老是脚本文件名称假设咱们有一个名为console.php
的命令行脚本文件
<?php echo '命令行参数个数: ' . $argc . "\n"; echo "命令行参数:\n"; foreach ($argv as $index => $arg) { echo " {$index} : {$arg}\n"; }
在命令行下执行该脚本
$ php console.php hello world 命令行参数个数: 3 命令行参数: 0 : console.php 1 : hello 2 : world
能够看到,第0个参数是咱们执行的脚本名称。须要注意的是,若是提供的第一个参数是以-
开头的话,须要在前面增长--
,以告诉php这后面的参数是提供给咱们的脚本的,而不是php执行文件的(php -r 'var_dump($argv);' -- -h
)。
另外,在脚本中,咱们能够经过php_sapi_name()
函数判断是不是在命令行下运行的
$ php -r 'echo php_sapi_name(), PHP_EOL;' cli
参考文献