我在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给定
答案 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()
答案 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);