0

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

4

2 回答 2

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 扩展。我会使用它而不是通过调用 curlexec()

于 2013-04-04T18:38:15.020 回答
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);
于 2013-04-04T18:44:30.157 回答