我正在Csharp中開發一個Web服務器,我想在它上面安裝php編譯器。如何發送http請求到編譯器
當前狀態:Web服務器正在接收的連接,可以編譯PHP頁面,我使用procces start
調用PHP編譯器,我可以發送GET參數ARG這樣的:
php.exe name=1 /index.php
的問題是如何以更好的方式發送帖子,獲取數據和HTTP頭到編譯器?
我正在Csharp中開發一個Web服務器,我想在它上面安裝php編譯器。如何發送http請求到編譯器
當前狀態:Web服務器正在接收的連接,可以編譯PHP頁面,我使用procces start
調用PHP編譯器,我可以發送GET參數ARG這樣的:
php.exe name=1 /index.php
的問題是如何以更好的方式發送帖子,獲取數據和HTTP頭到編譯器?
在命令行界面上傳遞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是一個解釋語言,而不是一個編譯的。
我欣賞你的解決方案,我更喜歡的hackish發送數據,它是用GET和POST的明文這樣的幫助,那多內容 我不喜歡用更多的資源(內置服務器),也沒有切換到FastCGI的 –
如果這是關於文件上傳的,你可以嘗試注入超全局的['$ _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