## 命令行选项

PHP 二进制文件可以随时通过执行带 -h 参数的 PHP 命令获取提供的命令行选项列表：

    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] -- [args...]
       php [options] -a

      -a               Run interactively
      -c <path>|<file> Look for php.ini file in this directory
      -n               No php.ini file will be used
      -d foo[=bar]     Define INI entry foo with value 'bar'
      -e               Generate extended information for debugger/profiler
      -f <file>        Parse and execute <file>.
      -h               This help
      -i               PHP information
      -l               Syntax check only (lint)
      -m               Show compiled in modules
      -r <code>        Run PHP <code> without using script tags <?..?>
      -B <begin_code>  Run PHP <begin_code> before processing input lines
      -R <code>        Run PHP <code> for every input line
      -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> Run with built-in web server.
      -t <docroot>     Specify document root <docroot> for built-in web server.
      -s               Output HTML syntax highlighted source.
      -v               Version number
      -w               Output source with stripped comments and whitespace.
      -z <file>        Load Zend extension <file>.

      args...          Arguments passed to script. Use -- args when first argument
                       starts with - or script is read from stdin

      --ini            Show configuration file names

      --rf <name>      Show information about function <name>.
      --rc <name>      Show information about class <name>.
      --re <name>      Show information about extension <name>.
      --rz <name>      Show information about Zend extension <name>.
      --ri <name>      Show configuration for extension <name>.

命令行选项
选项 | 长选项 | 说明
--- | --- | ---
-a | --interactive | 运行交互式 PHP。参阅交互式 shell 章节获取更多信息。
-b | --bindpath | 外部 FASTCGI 服务器模式绑定路径（仅 CGI 可用）。
-C | --no-chdir | 不改变脚本的目录（仅 CGI 可用）。
-q | --no-header | 安静模式。禁止输出 HTTP 头（仅 CGI 可用）。
-T | --timing | 测量脚本重复 count 次的执行时间（仅 CGI 可用）。
-c | --php-ini | 在指定目录查找 php.ini 或者自定义 `INI` 文件（名称可以不是 php.ini），例如：
    $ php -c /custom/directory/ my_script.php

    $ php -c /custom/directory/custom-file.ini my_script.php
如果未指定此选项，php.ini 将在默认位置搜索。
-n | --no-php-ini | 完全忽略 php.ini。
-d | --define | 允许设置 php.ini 中配置指令的值。语法是：
     -d configuration_directive[=value]
示例 #1 使用 `-d` 设置 INI 配置的示例
    # 忽略值部分，将会设置配置指令为 "1"
    $ php -d max_execution_time
            -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
    string(1) "1"

    # 传递空值，将会设置配置指令为 ""
    php -d max_execution_time=
            -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
    string(0) ""

    # 配置指令将会设置为 '=' 字符之后传递的任何值
    $  php -d max_execution_time=20
            -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
    string(2) "20"
    $  php
            -d max_execution_time=doesntmakesense
            -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
    string(15) "doesntmakesense"
-e | --profile-info | 激活扩展信息模式，用于调试/分析。
-f | --file | 解析并执行指定文件。 -f 可选且可以忽略 —— 只需提供需要执行的文件名就足够。
-h and -? | --help and --usage | 输出命令行选项列表并描述了这些选项的作用。
-i | --info | 调用 phpinfo() 并输出结果。如果 PHP 不能正常工作，建议使用命令 php -i 查看在信息表输出之前或者中间某个位置是否有错误消息。注意当使用 CGI 模式时会输出 HTML， 这会非常大。
-l | --syntax-check | 检查语法但不执行指定 PHP 代码。如果未指定文件，则将处理来自标准输入的输入，否则将检查每个文件。成功时，文本 `No syntax errors detected in <filename>` 将写入标准输出。失败时，除了内部解析器错误外，文本 `Errors parsing <filename>` 将写入标准输出。如果在指定文件（或标准输入）中发现任何错误，则将 shell 返回代码设置为 `-1`，否则将 shell 返回代码设置为 `0`。 此选项不会找到需要执行代码的致命错误（如未定义的函数）。 注意: 在 PHP 8.3.0 之前，只能指定一个要检查的文件。 注意: 此选项不能和 -r 一起使用。
-m | --modules | 示例 #2 打印内置（且已加载的） PHP 和 Zend 模块
    $ php -m
    [PHP Modules]
    xml
    tokenizer
    standard
    session
    posix
    pcre
    overload
    mysql
    mbstring
    ctype

    [Zend Modules]
> -r | --run | 允许在命令行内直接执行单行 PHP 代码。 不需要加上 PHP 开始和结束标识符（`<?php` 和 `?>`），否则将会造成语法错误。 注意: 使用这种形式的 PHP 时，应注意避免和 shell 环境进行的命令行参数替换相冲突。 示例 #3 当使用双引号时会造成语法错误
>     $ php -r "$foo = get_defined_constants();"
>     PHP Parse error:  syntax error, unexpected '=' in Command line code on line 1

>     Parse error: syntax error, unexpected '=' in Command line code on line 1
> 这里的问题是在使用双引号 `"` 时 sh/bash 会执行变量替换。 由于 $foo 变量没有被定义，因此它将替换为空字符， 从而导致传递给 PHP 执行的代码实际上会变成：
>     $ php -r " = get_defined_constants();"
> 正确的方式是使用单引号 `'` 。使用单引号时 sh/bash 不会进行变量替换。 示例 #4 使用单引号防止 shell 变量替换
>     $ php -r '$foo = get_defined_constants(); var_dump($foo);'
>     array(370) {
>       ["E_ERROR"]=>
>       int(1)
>       ["E_WARNING"]=>
>       int(2)
>       ["E_PARSE"]=>
>       int(4)
>       ["E_NOTICE"]=>
>       int(8)
>       ["E_CORE_ERROR"]=>
>       [...]
如果使用的 shell 不是 sh/bash，可能会碰到更多的问题 —— 如果有的话，请向 » https://github.com/php/php-src/issues 报告 bug。试图在命令行中使用（ shell/PHP ）变量或者使用反斜杠转义时需要格外小心，因为很容易遇到问题。勿谓言之不预！ 注意: 可以在 CLI SAPI 中使用 -r，但不能在 CGI SAPI 中使用。 注意: 此选项仅适用于非常基本的代码，因此在此模式下会忽略某些配置指令（如 auto_prepend_file 和 auto_append_file）。
-B | --process-begin | 处理 stdin 之前需要执行的 PHP 代码。
-R | --process-code | 对每个输入行都执行的 PHP 代码。 此模式下有两个特殊变量： $argn 和 $argi。 $argn 将包含 PHP 正在处理的行， $argi 将包含正在处理的行号。
-F | --process-file | 对每个输入行都执行的 PHP 文件。
-E | --process-end | 在处理完输入后执行的 PHP 代码。 示例 #5 使用 -B 、 -R 、 -E 选项统计项目总行数。
    $ find my_proj | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Total Lines: $l\n";'
    Total Lines: 37328
-S | --server | 启动 内置 web 服务器.
-t | --docroot | 为内置 web 服务器指定文档根目录。
-s | --syntax-highlight 和 --syntax-highlighting | 为源代码添加语法高亮显示。 此选项将使用内部机制解析文件并将生成的 HTML 高亮版本写入到标准输出。 注意它所做的只是生成一块 `<code> [...] </code>` HTML 标记，没有 HTML header。 注意: 此选项不能和 -r 一起使用。
-v | --version | 示例 #6 使用 -v 获取 SAPI 的名称以及 PHP 和 Zend 的版本号
    $ php -v
    PHP 5.3.1 (cli) (built: Dec 11 2009 19:55:07)
    Copyright (c) 1997-2009 The PHP Group
    Zend Engine v2.3.0, Copyright (c) 1998-2009 Zend Technologies
-w | --strip | 显示忽略注释和空格后的源代码。 注意: 此选项不能和 -r 一起使用。
-z | --zend-extension | 加载 Zend 扩展。如果仅指定了文件名，PHP 将尝试从当前系统默认函数库中尝试加载此扩展 （例如在 Linux 上通常是 /etc/ld.so.conf）。 传递绝对路径的文件名将不会使用系统库搜索路径。如果用相对路径指定的文件名，则 PHP 仅试图在当前目录的相对目录加载扩展库。
| --ini | 展示配置文件名和扫描目录。 示例 #7 `--ini` 示例
    $ php --ini
    Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
    Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
    Scan for additional .ini files in: (none)
    Additional .ini files parsed:      (none)
--rf | --rfunction | 展示指定函数或者类方法的有关信息（例如参数名称和数量）。 如果 PHP 在编译时启用 Reflection 支持，该选项才可以使用。 示例 #8 基础 `--rf` 用法
    $ php --rf var_dump
    Function [ <internal> public function var_dump ] {

      - Parameters [2] {
        Parameter #0 [ <required> $var ]
        Parameter #1 [ <optional> $... ]
      }
    }
--rc | --rclass | 展示指定类的有关信息（常量、属性和方法的列表）。 如果 PHP 在编译时启用 Reflection 支持，该选项才可以使用。 示例 #9 `--rc` 示例
    $ php --rc Directory
    Class [ <internal:standard> class Directory ] {

      - Constants [0] {
      }

      - Static properties [0] {
      }

      - Static methods [0] {
      }

      - Properties [0] {
      }

      - Methods [3] {
        Method [ <internal> public method close ] {
        }

        Method [ <internal> public method rewind ] {
        }

        Method [ <internal> public method read ] {
        }
      }
    }
--re | --rextension | 展示指定扩展的有关信息（php.ini 选项、定义函数、常量和类的列表）。 如果 PHP 在编译时启用 Reflection 支持，该选项才可以使用。 示例 #10 `--re` 示例
    $ php --re json
    Extension [ <persistent> extension #19 json version 1.2.1 ] {

      - Functions {
        Function [ <internal> function json_encode ] {
        }
        Function [ <internal> function json_decode ] {
        }
      }
    }
--rz | --rzendextension | 展示指定 Zend 扩展的配置信息（也可以通过 phpinfo() 返回相同信息）。
--ri | --rextinfo | 展示指定扩展的配置信息（也可以通过 phpinfo() 返回相同信息）。 使用 “main” 作为扩展名可以获取到核心配置信息。 示例 #11 `--ri` 示例
    $ php --ri date

    date

    date/time support => enabled
    "Olson" Timezone Database Version => 2009.20
    Timezone Database => internal
    Default timezone => Europe/Oslo

    Directive => Local Value => Master Value
    date.timezone => Europe/Oslo => Europe/Oslo
    date.default_latitude => 59.930972 => 59.930972
    date.default_longitude => 10.776699 => 10.776699
    date.sunset_zenith => 90.583333 => 90.583333
    date.sunrise_zenith => 90.583333 => 90.583333

> 注意:

> 选项 `-rBRFEH`、 `--ini` 、 `--r[fcezi]` 仅可以在 CLI 中使用。

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open