从cgi创建过滤器,未传递env变量

时间:2018-04-09 19:37:39

标签: php filter environment-variables cgi

我有一个编译的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从未看到环境变量。我完全误解了它应该如何工作? 我哪里错了?

2 个答案:

答案 0 :(得分:0)

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

putenv("VARIABLE=value");

答案 1 :(得分:0)

我的解决方案非常有效,它是: 在php中使用以下信息构建字符串(QUERY_STRING只是示例)

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

这就是全部。