2

会社が私のサイトに情報を送信しており、次のような CGI ファイルに送信したいと考えています。

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

パラメータ データを MySql db に書き込む必要があり、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. シバン行は#!/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

parse_strPHP 7.2.0 ( http://php.net/manual/en/function.parse-str.php ) では、2 番目のパラメーターを使用せずに解析結果を格納することは非推奨です。現在、関数は値を返しません。からクエリ文字列を取得できる$_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);
?>
于 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 に答える