【问题标题】:create a filter from cgi, env variables not being passed从 cgi 创建一个过滤器,未传递 env 变量
【发布时间】:2018-04-09 19:37:38
【问题描述】:

我有一个已编译的 C 程序,它是一个 cgi,如果我直接从 php 网页使用适当的 GET 或 POST 请求调用它,它就可以正常工作。 我正在尝试让一个 php 程序调用 cgi,捕获数据并对其进行修改,然后再将其回显给用户。

我试过了:

<?php
    foreach($_REQUEST as $i => $j)
        apache_setenv($i,$j);
    $out = shell_exec("cgi-bin/Mycgi.cgi");
    // will modify out here
    echo $out;
?>

但 Mycgi.cgi 永远不会看到环境变量。我是否完全误解了这应该如何工作? 我哪里错了?

【问题讨论】:

    标签: php filter environment-variables cgi


    【解决方案1】:

    在您的脚本中调用shell_exec 之前,您必须使用putenv 显式设置环境变量。

    putenv("VARIABLE=value");
    

    【讨论】:

    • 是的,我也试过了。 (用 apache_setenv($i,$j) 替换 putenv("$i=$j") 相同的结果。
    【解决方案2】:

    我的解决方案效果很好: 在 php 中使用以下信息构建一个字符串(QUERY_STRING 只是示例)

    $qs = 
        'env REQUEST_METHOD=GET QUERY_STRING="Birthday=15&BirthMonth=3&BirthYear=1988" ../../cgi-bin/mycgi.cgi';
    $output = '';
    exec($qs,$output);
    

    仅此而已。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-13
      • 2011-11-13
      • 2013-08-08
      • 1970-01-01
      相关资源
      最近更新 更多