我在php的exec命令中运行这个命令有问题:
已更新的工作代码:
$results = exec('curl --dump-header - -H "Content-Type: application/json" -X PUT --data @data.json https://website.url --insecure', $output);
if ($results) {
echo "yay!";
var_dump($output);
echo $results;
} else {
var_dump($output);
echo "screw you";
}
原来的脚本一起工作在Linux中,但在PHP执行内部的单引号与PHP的执行引号冲突。之前的脚本:
curl --dump-header - -H "Content-Type: application/json" -X PUT --data '{"data": "foo", "data2": "bar"}' https://website.url
我想知道什么可以解决这个报价问题,我认为escapeshellarg()
可能会这样做,但无济于事。
更新:
Error page
PHP: escapeshellarg()只需要一个参数,
给出0
这是一个打字错误。使用[]
来访问$_POST
阵列,而不是使用()
。否则name和pass将为空,这将中断命令行。此外,在shell命令中使用之前,必须对传入的帖子进行转义。否则,代码很容易受到shell cmd注入的攻击(这是致命的):
$postname = escapeshellarg($_POST['name']);
$postpass = esacpeshellarg($_POST['pass']);
还缺少json数据前后的空格。改为:
$results = exec('curl --dump-header - -H "Content-Type: application/json" -X PUT --data '.escapeshellarg($jsondata). ' https://website.url');
改变后,这个例子对我有用。但是您应该注意php curl扩展。我将使用它而不是通过exec()
试试这个:
$jsondata = '{"data":"'.$_POST['name'].'", "data2":"'.$_POST['pass'].'"}';
$command = "curl --dump-header - -H '"Content-Type: application/json'" -X PUT --data '$jsondata' https://website.url";
$results = exec($command);