变量在shell_exec()中不起作用我找不到错误

时间:2019-03-20 10:55:16

标签: php

由于某种原因,我无法在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');
?>

1 个答案:

答案 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");
?>

但这很快就会变得难以理解(您必须转义单引号,而\"将变成\\\"