2

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

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

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

4

3 回答 3

2

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

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

所以你的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.
?>
于 2013-01-08T23:29:03.263 回答
2

在 PHP 7.2.0 ( http://php.net/manual/en/function.parse-str.php )中不推荐使用parse_str不带第二个参数来存储解析结果。该函数现在不返回值。您可以从 中提取查询字符串,因此调用变为,如下所示:$_SERVER['QUERY_STRING']parse_strparse_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);
?>
于 2017-04-30T17:05:00.687 回答
1

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

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

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

您可以通过 CGI 脚本运行 PHP 脚本,但这只会增加复杂性。把事情简单化。

于 2013-01-08T23:18:37.803 回答