2016-04-23 77 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