欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP命令行(CLI模式)

程序员文章站 2022-04-13 12:36:49
CLI模式 CLI模式其实就是命令行运行模式,英文全称Command-Line Interface(命令行接口) 以交互式Shell模式运行PHP http://php.net/manual/en/features.commandline.interactive.phpThe interactive ......

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