在PHP中执行exec命令不起作用


running exec command in php does not function

我在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()

调用curl

试试这个:

$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);