2016-04-23 78 views
0

我正在Csharp中開發一個Web服務器,我想在它上面安裝php編譯器。如何發送http請求到編譯器

當前狀態:Web服務器正在接收的連接,可以編譯PHP頁面,我使用procces start調用PHP編譯器,我可以發送GET參數ARG這樣的:

php.exe name=1 /index.php 

的問題是如何以更好的方式發送帖子,獲取數據和HTTP頭到編譯器?

回答

0

在命令行界面上傳遞HTTP頭的確存在一個相當不合理的解決方案:-B--process-begin標誌允許在有問題的腳本之前運行代碼。這可用於將數據注入到$_SERVER超全局數組中以模擬正在設置的標頭。例如。爲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找到。

最後一件事:PHP是一個解釋語言,而不是一個編譯的。

+0

我欣賞你的解決方案,我更喜歡的hackish發送數據,它是用GET和POST的明文這樣的幫助,那多內容 我不喜歡用更多的資源(內置服務器),也沒有切換到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