2016-04-23 8 views
0

私はCsharpでWebサーバを開発していますので、PHPコンパイラをインストールしたいと思います。コンパイラにhttpリクエストを送信するには

現在の状態:Webサーバは、PHPページをコンパイルすることができ、作業との接続を受信して​​いる、私はprocces startを使用してPHPコンパイラを起動していると私はそのような引数としてGETパラメータを送信することができます。問題がある

php.exe name=1 /index.php 

投稿を送る方法、データとHTTPヘッダーをコンパイラに提供するなど、より良い方法で?

答えて

0

実際には、コマンドラインインターフェイスでHTTPヘッダーを渡すためのヒントがあります。-Bまたは--process-beginフラグを使用すると、問題のスクリプトの前にコードを実行できます。これは、設定されているヘッダーをシミュレートするために、データをスーパーグローバルアレイに注入するために使用できます。例えば。 X-Foo: barを設定するために、あなたはこれを実行します:

php.exe --process-begin '$_SERVER["HTTP_X_FOO"] = bar;' /index.php 

同じことが$_GET$_POSTスーパーグローバルで行うことができます。しかし、これは本当にちょうどハックなので、セキュリティ上の理由からこれを学問的な環境の外ではお勧めできません。

少し良い方法はbuiltin webserverを利用することでした。きちんとコーディングしていれば、到着したリクエストをPHPに再ルーティングし、結果を戻すことは問題ありません。ただし、仮想ホストを必要としない場合にのみ、これは完璧に機能します。上記のソリューションと同様に、これは研究の外には何もありません!

絶対的な正しい方法は、Common Gateway Interfaceを実装することでした。 PHPにはCGIインターフェイスが付属しているので、CGIを話すのはtrivialです。スケーラビリティの問題が発生した場合は、FastCGIに切り替えることをお勧めします。サンプルの実装はhereです。

最後の1つ:PHPはと解釈され、の言語であり、コンパイルされたものではありません。

+0

私はあなたのソリューションを高く評価しています。私はデータを送信するのが好きです。平文の取得とポストではマルチパートのコンテンツはどうでしょう? 私はリソースをもっと使いたくないのですが(サーバ内蔵)、fastcgi –

+0

これがファイルのアップロードに関するものであれば、['$ $ _FILES'](http://php.net/manual/en/reserved.variables.files.php)のスーパーグローバルに挿入することができます。より複雑なすべてのもの(例えば、本格的なMIMEマルチパートメッセージ)では、これは実行可能ではありません。また、コマンドラインの長さは[制限されています](http://stackoverflow.com/questions/3205027/maximum-length-of-command-line-string)。これらの理由から、とりわけセキュリティは、CGIまたはFastCGIを採用することを強くお勧めします。 – DaSourcerer

関連する問題