【问题标题】:running exec command in php does not function在 php 中运行 exec 命令不起作用
【发布时间】:2013-04-04 18:32:52
【问题描述】:

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

【问题讨论】:

  • 与您之前的命令相比,您的 json 数据周围似乎缺少空格。

标签: php exec


【解决方案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

【讨论】:

  • 我们曾尝试过,但无济于事 :( 我们正在连接美味的休息系统。
  • 不幸的是,如果没有帐户,我无法进行测试。您是否尝试过使用 curl 扩展?你会在网上找到大量的例子。但如果您需要,可以提供帮助
  • 您可以将您尝试的确切网址添加到问题中吗?
  • 我不能,因为它包含 api 密钥和秘密,但 url 不是问题,当我尝试输入 json 数据时出现问题
  • 哇!让它工作。我正在将上面的代码更新为新的工作代码。
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 2019-02-18
    • 2020-10-31
    • 1970-01-01
    • 2013-01-31
    • 2014-11-25
    相关资源
    最近更新 更多