我正在尝试从终端运行以下 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
我在这里做错了什么?如何从终端运行上面的代码?
因为您在双引号内运行 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)