由于某种原因,我无法在shell_exec
中使用变量。我已经尝试将'
更改为"
,但这也不起作用。
这有效:
<?php
shell_exec('curl --request PUT --data "{\"on\":true, \"bri\":200}" http://192.168.178.21/api/cWRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/2/state');
?>
但这不是:
<?php
$status = true;
shell_exec('curl --request PUT --data "{\"on\":$status, \"bri\":200}" http://192.168.178.21/api/cWRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/2/state');
?>
答案 0 :(得分:1)
您要连接字符串。由于php将true
设置为1
,因此您可能需要一个中间变量将true
的值设置为"true"
<?php
$status = true;
$string_status = $status ? 'true' : 'false';
shell_exec('curl --request PUT --data "{\"on\":' . $string_status . ', \"bri\":200}" http://192.168.178.21/api/cWRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/2/state');
?>
您不能直接在单引号分隔的字符串中传递变量。您必须关闭该字符串,concat,然后重新打开。
例如:
<?php
$myVar = "world";
echo "Hello $myVar"; //displays : Hello world
echo 'Hello $myVar'; //displays : Hello $myVar
如果您想在shell_exec()
中使用双引号分隔的字符串,则必须转义已有的双引号,例如:
<?php
$status = true;
$string_status = $status ? 'true' : 'false';
shell_exec("curl --request PUT --data \"{\\\"on\\\":$string_status, \\\"bri\\\":200}\" http://192.168.178.21/api/cWRXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX/lights/2/state");
?>
但这很快就会变得难以理解(您必须转义单引号,而\"
将变成\\\"