将CGI命令行参数传递给PHP文件

时间:2013-01-08 23:00:14

标签: php parameters cgi

公司正在向我的网站发送信息,他们希望将其发送到CGI文件:

mysite.com/cgi-bin/process.cgi?custid=ab123&amount=12345

我必须将参数数据写入MySql数据库,我宁愿使用PHP(因为我不知道cgi)。如何将url参数传递给我的php脚本?另外,如果我重定向到php文件,发件人是否知道我这样做了?我不能只是从cgi脚本“调用”php文件吗?

3 个答案:

答案 0 :(得分:1)

您可以编写一个普通的PHP脚本来处理它们传递的数据(使用$_GET变量),并设置一个.htaccess重定向来掩盖它不是由实际CGI脚本处理的事实。

将它放在站点根目录中的.htaccess文件中,以及PHP脚本(在此示例中称为“process.php”)。

RewriteRule ^cgi-bin/process.cgi$ process.php [L]

您可以通过CGI脚本运行PHP脚本,但它只会增加更多的复杂性。保持简单。

答案 1 :(得分:1)

要将PHP脚本作为CGI运行,您需要了解这些

  1. 由于CGI PHP不会作为apache处理程序运行,而是作为进程运行。
  2. PHP不会填充$_GET$_POST
  3. 您的php文件应该是可执行的chmod +x
  4. shebang行应为#!/usr/bin/env php#!/usr/bin/php
  5. 应从QUERY_STRING和POST读取GET数据,应从STDIN读取PUT。
  6. HTTP标头应手动发送。
  7. 所以你的process.cgi看起来像这样,

    #!/usr/bin/env php-cli
    <?php
    // populating $_GET
    $_GET=parse_str(getenv('QUERY_STRING'));
    $custid=$_GET['custid'];
    $amount = $_GET['amount'];
    // do work
    
    echo "Content-type: text/html\r\n";
    echo "Connection: Close\r\n\r\n";
    // start output here.
    ?>
    

答案 2 :(得分:1)

在PHP 7.2.0(http://php.net/manual/en/function.parse-str.php)中不推荐使用parse_str而不使用第二个参数来存储解析结果。该函数现在不返回值。您可以从$_SERVER['QUERY_STRING']提取查询字符串,因此parse_str调用变为parse_str($_SERVER['QUERY_STRING'], $destination),如下所示:

<?php
$DEBUG = true;
if ($DEBUG) echo "<p>PHP: good to go</p>";
if ($DEBUG) echo $_SERVER['QUERY_STRING'];
parse_str($_SERVER['QUERY_STRING'], $_GET);
if (empty($_GET)) {
    if ($DEBUG) echo "<p>Not picking up the GET.</p>";
    exit;
}
if ($DEBUG) echo "<p>Got a GET.</p>";
if ($DEBUG) print_r($_GET);
?>