侧边栏壁纸
  • 累计撰写 194 篇文章
  • 累计收到 31 条评论
php

PHP 的命令行模式

五好
2020-12-13 / 0 评论 / 524 阅读 / 正在检测是否收录...

PHP 的命令行模式中 -r 参数的用法 一直莫不请套路,今天终于明白了
-r --run
使用该参数可以在命令行内运行单行 PHP 代码。无需加上 PHP 的起始和结束标识符(<?php 和 ?>),否则将会导致语法解析错误。

注意:

使用这种形式的 PHP 时,应注意避免和外壳环境进行的命令行参数替换相冲突。

显示语法解析错误的范例

$ php -r "$foo = get_defined_constants();"
Command line code(1) : Parse error - parse error, unexpected '='
这里的问题在于即使使用了双引号 ",sh/bash 仍然实行了参数替换。由于 $foo 没有被定义,被替换后它所在的位置变成了空字符,因此在运行时,实际被 PHP 读取的代码为:
$ php -r " = get_defined_constants();"
正确的方法是使用单引号 '。在用单引号引用的字符串中,变量不会被 sh/bash 还原成其原值。
$ 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,可能会碰到更多问题。请将碰到的 Bug 向 » https://bugs.php.net/ 报告。注意,当试图将 shell 变量用到代码中或者使用反斜线时仍然很容易碰到问题。
注意:

-r 在 CLI SAPI 中有效,在 CGI SAPI 中无效。

注意:

此选项只用于非常基本的用途。因此一些配置指令(例如 auto_prepend_file 和 auto_append_file)在此模式下被忽略。
更多使用方法 https://www.php.net/manual/zh/features.commandline.php

0

评论 (0)

取消