4

まず第一に、私はフランス人学生なので、英語のレベルが低くてすみません。

現在、Web サーバー (C++) を開発しており、CGI 実行部分、より正確には PHP CGI 部分を開発する必要があります。

ユーザーがサーバー上の .php ページを要求すると、fork/pipe して /usr/bin/php インタープリターを呼び出します。例えば ​​:

$ /usr/bin/php index.php

これで、結果をバッファー (index.php の生成された html コード) に保存し、このコンテンツをクライアントに送信できます。変数のない単純なスクリプトで機能しています。

ただし、多くの PHP スクリプトは $_GET や $_POST などのスーパーグローバルを使用しています。私の問題は次のとおりです。phpインタープリターにこの引数を与えるにはどうすればよいですか?

例: この $_POST 変数を設定して、"Hello world" をバッファに保存するにはどうすればよいですか?

<?php

echo $_POST['text'];

?>

今後ともご回答よろしくお願いいたします。

心から

4

2 に答える 2

4

CGI プログラムは、上の POST データを予期しますstdinQUERY_STRING環境変数でデータを取得します。

于 2011-04-11T12:00:19.323 に答える
3

いくつかの環境変数を設定する必要があります:

  • REQUEST_METHOD=POSTPOSTリクエストを処理する必要があることをPHPに伝える
  • CONTENT_LENGTH=1234生の POST データとして受け取るバイト数 (この場合は 1234 バイト) を PHP に通知します。
  • HTTP_CONTENT_LENGTHと基本的に同じCONTENT_LENGTH。さまざまな PHP バージョン/構成でより適切に機能するように、これも設定することをお勧めします。
  • CONTENT_TYPE=application/x-www-form-urlencodedHTTP Content-Type ヘッダーです

これらの変数の正しい値は、HTTP ヘッダーから取得します。

生の POST データをその STDIN に送信するには、PHP プロセスへの双方向パイプも必要です。PHP からのスクリプト出力を既に受け取っていると思います。

通常のブラウザ リクエストを処理する限り、詳細を知る必要はありません。それ以外の場合、POST データがサーバーから直接送信される場合は、上記の CONTENT_TYPE を使用して変数を URL エンコードします。

  • REQUEST_METHOD=POST
  • CONTENT_LENGTH=16
  • HTTP_CONTENT_LENGTH=16
  • CONTENT_TYPE=application/x-www-form-urlencoded

標準入力データ: test=Hello+world

GET リクエストの場合REQUEST_METHOD=GETは、他の変数を変更してそのままにしておきます。どちらの場合でも、QUERY_STRING環境変数を介してクエリ文字列を渡すことができます。

于 2011-04-11T12:10:55.227 に答える