在php中运行exec命令不起作用

时间:2013-04-04 18:32:52

标签: php exec

我在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 exec内部单引号与php的exec引号冲突。上一个脚本:

curl --dump-header - -H "Content-Type: application/json" -X PUT --data '{"data": "foo", "data2": "bar"}' https://website.url

我想知道什么可以解决这个引用问题,我认为escapeshellarg()可能会这样做但无济于事。

更新:

错误页面错误

  

PHP警告:escapeshellarg()只需要1个参数,0给定

2 个答案:

答案 0 :(得分:1)

这是一个错字。使用[]访问$_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 extension。我会使用它而不是通过exec()

调用curl

答案 1 :(得分:0)

试试这个:

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