PHP命令行(CLI模式)
cli模式
cli模式其实就是命令行运行模式,英文全称command-line interface(命令行接口)
$ php -h usage: 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 -a run as interactive shell 以交互shell模式运行 -c <path>|<file> look for php.ini file in this directory 指定php.ini文件所在的目录 -n no configuration (ini) files will be used 指定不使用php.ini文件 -d foo[=bar] define ini entry foo with value 'bar' 定义一个ini实体,key为foo,value为'bar' -e generate extended information for debugger/profiler 为调试和分析生成扩展信息 -f <file> parse and execute <file>. 解释和执行文件<file> -h this help 打印帮助信息 -i php information 显示php的基本信息 -l syntax check only (lint) 进行语法检查(lint) -m show compiled in modules 显示编译到内核的模块 -r <code> run php <code> without using script tags <?..?> 运行php代码<code>,不需要使用标签<?..?> -b <begin_code> run php <begin_code> before processing input lines 在处理输入之前先执行php代码<begin_code> -r <code> run php <code> for every input line 对输入的每一行作为php代码<code>运行 -f <file> parse and execute <file> for every input line 对输入的每一行解析和执行<file> -e <end_code> run php <end_code> after processing all input lines 在处理所有输入的行之后执行php代码<end_code> -h hide any passed arguments from external tools. 隐藏任何来自外部工具传递的参数 -s <addr>:<port> run with built-in web server. 运行内置的web服务器 -t <docroot> specify document root <docroot> for built-in web server. 指定用于内置web服务器的文档根目录<docroot> -s output html syntax highlighted source. 输出html语法高亮的源码 -v version number 输出php的版本号 -w output source with stripped comments and whitespace. 输出去掉注释和空格的源码 -z <file> load zend extension <file>. 载入zend扩展文件<file> args... arguments passed to script. use -- args when first argument starts with - or script is read from stdin 传递给要运行的脚本的参数。当第一个参数以'-'开始或者是脚本是从标准输入读取的时候,使用'--'参数 --ini show configuration file names 显示php的配置文件名 --rf <name> show information about function <name>. 显示关于函数<name>的信息 --rc <name> show information about class <name>. 显示关于类<name>的信息 --re <name> show information about extension <name>. 显示关于扩展<name>的信息 --rz <name> show information about zend extension <name>. 显示关于zend扩展<name>的信息 --ri <name> show configuration for extension <name>. 显示扩展<name>的配置信息
以交互式shell模式运行php
http://php.net/manual/en/features.commandline.interactive.php
the interactive shell stores your history which can be accessed using the up and down keys. the history is saved in the ~/.php_history file.
交互shell模式保存输入的历史命令,可以使用上下键访问到。历史被保存在~/.php_history文件。
$ php -a interactive shell php > echo 5+8; 13 php > function addtwo($n) php > { php { return $n + 2; php { } php > var_dump(addtwo(2)); int(4)
查找相关类、扩展或者函数的信息
通常,我们可以使用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
语法检查
只需要检查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
命令行脚本
$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