不可否认,这对我来说是一个奇怪的问题,但这就是我正在做的事情:
我有一个Ruby脚本,它正在执行一串PHP代码并捕获输出。
这与从命令行运行cgi PHP的another problem that I had有些关联。
以下是Ruby脚本的来源:
#!/usr/bin/ruby
puts "Content-type: text/html\n\n"
puts "Start PHP Output<br />"
puts `echo '<?php echo "hello world"; ?>' | php5 -q`
puts "End PHP Output<br />"
我无法弄清楚的奇怪的事情是,当我从命令行和CGI运行Ruby脚本时,这里的PHP代码似乎表现不同。这对我来说真的没有意义,因为无论哪种方式,我都从具有相同参数的命令执行相同的PHP字符串。
当我从命令行运行上面的Ruby脚本时,我得到了我期望的输出:
内容类型:text / html
启动PHP输出
hello world End PHP输出
当我通过CGI从浏览器点击相同的Ruby脚本时,我得到了这个输出:
启动PHP输出
X-Powered-By: PHP / 5.2.13内容类型:text / html
put“Content-type:text / html \ n \ n” 把“启动PHP输出”放入echo 'hello world' | php5 -q
提出 “结束PHP输出
”结束PHP 输出
对我来说,看起来正如所发生的那样,PHP的字符串并没有抑制标题,就像我期望-q选项那样......并且还将我的整个Ruby脚本转储回浏览器 - 这令我感到困惑。
有什么想法吗?
提前致谢!
答案 0 :(得分:1)
据我所知,PHP接管整个请求&amp;使用所请求的相同文件重新运行它,之后它在调用点将控制权返回给ruby。如果可能的话,请使用CLI而不是CGI。
您可以尝试清除cgi在Web服务器请求中确定的环境变量。
#!/usr/bin/ruby
puts "Content-type: text/plain\n\n"
puts "Start PHP Output<br />"
f = IO.popen("env -i php5-cgi -q","r+")
f.write("<?php var_dump(time());?>");
f.close_write()
f.each {|line| puts line}
f.close()
puts "End PHP Output<br />"