PHP 大会日本 2024

命令行选项

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

不要 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 设置的示例

# Omitting the value part will set the given configuration directive to "1"
$ php -d max_execution_time
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Passing an empty value part will set the configuration directive to ""
php -d max_execution_time=
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# The configuration directive will be set to anything passed after the '=' character
$  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 和 -? --help 和 --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"]=>
  [...]

如果使用 sh/bash 之外的 shell,可能会遇到更多问题 - 如果适用,应在 » https://github.com/php/php-src/issues 打开错误报告。在尝试在命令行代码中使用变量(shell 或 PHP)或使用反斜杠进行转义时,仍然很容易遇到麻烦,因此在这样做时要非常小心。你已被警告!

注意:

-rCLI SAPI 中可用,但在 CGI SAPI 中不可用。

注意:

此选项仅适用于非常基本的代码,因此在此模式下会忽略一些配置指令(例如 auto_prepend_fileauto_append_file)。

-B --process-begin

在处理标准输入之前执行的 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 头。

注意:

此选项不能与 -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 使用 反射 支持编译时,此选项才可用。

示例 #8 基本的 --rf 用法

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <required> $var ]
    Parameter #1 [ <optional> $... ]
  }
}

--rc --rclass

显示关于给定类的信息(常量、属性和方法列表)。

只有在 PHP 使用 反射 支持编译时,此选项才可用。

示例 #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 使用 反射 支持编译时,此选项才可用。

示例 #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 中可用。

添加注释

用户贡献的注释 2 条注释

dch
1 年前
如果您想使用 shell 命令行中的 -i 开关以及指定的 php.ini 查看 PHP 的当前配置,那么参数的顺序很重要。将 -i 放在 -c 之后可以得到预期的结果。

将为默认 php.ini (cli) 打印信息
$ php -i --php-ini /etc/php/7.4/fpm/php.ini | grep -i "loaded conf"
Loaded Configuration File => /etc/php/7.4/cli/php.ini

将为所需的 php.ini (fpm) 打印信息
$ php --php-ini /etc/php/7.4/fpm/php.ini -i | grep -i "loaded conf"
Loaded Configuration File => /etc/php/7.4/fpm/php.ini
Ap.Muthu
10 年前
如果我们使用以下命令启动 php 内置的 web 服务器(PHP 5.4 及更高版本):
php -S localhost:8000 -t htdocs
并且其中有一个图像文件 picture.jpg
并在 html 页面中引用它:
<img src="picture.jpg">
渲染后的页面将不会显示图像,并且图像后面的 html 代码是
https://127.0.0.1:8000/index.php/picture.jpg

但是,如果页面中的 html 代码是
<img src="/picture.jpg">
则图片将正确显示。

因此,PHP 5.4.33 Win32 VC9 版本中的相对寻址已损坏。
To Top