zsh:错误的数学表达式:操作数应位于“HTTP_HOST...”

Rya*_*ton 4 php zsh

我正在尝试从终端运行以下 php:

php -r "error_reporting(E_NONE); $_SERVER['HTTP_HOST'] = 'localhost';
require('./config/site.php'); 
echo json_encode(array('HOST' => DB_SERVER, 'USER' => DB_USERNAME, 'PASS' => DB_PASSWORD, 'NAME' => DB_DATABASE));"
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

zsh: bad math expression: operand expected at `'HTTP_HOST...'

转义=没有任何效果,转义 会[产生 PHP 解析错误:

PHP Parse error: syntax error, unexpected '[', expecting identifier (T_STRING) in Command line code on line 1

我在这里做错了什么?如何从终端运行上面的代码?

oll*_*ead 5

因为您在双引号内运行 PHP 代码,所以 PHP 解释器会尝试将 $_SERVER['HTTP_HOST'] 替换为 $_SERVER['HTTP_HOST'] 的值,要使其正常工作,您需要转义 $

php -r "error_reporting(E_NONE); \$_SERVER['HTTP_HOST'] = 'localhost';
require('./config/site.php'); 
echo json_encode(array('HOST' => DB_SERVER, 'USER' => DB_USERNAME, 'PASS' => DB_PASSWORD, 'NAME' => DB_DATABASE));"
Run Code Online (Sandbox Code Playgroud)

我对我的其中一个盒子进行了测试以进行验证。

没有逃脱

[root@exia ~]# php -r "var_dump($_SERVER['HTTP_HOST']);"
array(1) {
  [0] =>
  string(9) "HTTP_HOST"
}
Run Code Online (Sandbox Code Playgroud)

随着逃脱

[root@exia ~]# php -r "var_dump(\$_SERVER['HTTP_HOST']);"
NULL
Run Code Online (Sandbox Code Playgroud)

还有一个很好的措施

[root@exia ~]# php -r "error_reporting(E_NONE); \$_SERVER['HTTP_HOST'] = 'localhost';
var_dump(\$_SERVER['HTTP_HOST']);"
string(9) "localhost"
Run Code Online (Sandbox Code Playgroud)