【问题标题】:Suppress PHP Headers running cgi PHP from Ruby禁止从 Ruby 运行 cgi PHP 的 PHP 标头
【发布时间】:2011-02-27 19:02:28
【问题描述】:

诚然,这对我来说是一个奇怪的问题,但这是我正在做的事情:

我有一个 Ruby 脚本,它正在执行一串 PHP 代码并捕获输出。

这与another problem that I had 从命令行运行 cgi PHP 有点相关。

这是 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 />"

我想不通的真正奇怪的事情是,当我从命令行运行 Ruby 脚本与从 CGI 运行 Ruby 脚本时,这里的 PHP 代码的行为似乎有所不同。这对我来说真的没有意义,因为无论哪种方式,我都是从具有相同参数的命令中执行相同的 PHP 字符串。

当我从命令行运行上述 Ruby 脚本时,我得到了我期望的输出:

内容类型:文本/html

开始 PHP 输出
hello world End PHP 输出

当我通过 CGI 从浏览器中点击相同的 Ruby 脚本时,我得到以下输出:

开始 PHP 输出
X-Powered-By: PHP/5.2.13 内容类型:text/html
提出“内容类型:文本/html\n\n” puts "开始 PHP 输出
" puts echo 'hello world' | php5 -q 放 "结束 PHP 输出
" 结束 PHP 输出

在我看来,发生的事情是 PHP 的字符串没有抑制标头,就像我期望的 -q 选项一样......并且还将我的整个 Ruby 脚本转储回浏览器- 这让我很困惑。

有什么想法吗?

提前致谢!

【问题讨论】:

  • 这可能更适合 ServerFault。可能是 CGI 中的配置与您的用户的配置不同。
  • 谢谢,我已经在 ServerFault 上发布了这个:serverfault.com/questions/148205/…

标签: php ruby command-line cgi


【解决方案1】:

据我所知,PHP 接管了整个请求并使用请求的相同文件重新运行它,然后在调用点将控制权返回给 ruby​​。如果可能,请使用 CLI 而不是 CGI,如果这是您尝试使用它的原因。

您可以尝试清除 cgi 确定它在网络服务器请求中的环境变量。

#!/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 />"

【讨论】:

  • 我不可能(目前在托管机器上运行)使用 CLI 而不是 CGI - 这是我研究的第一件事。似乎添加“env -i”确实解决了我遇到的问题!简单就是天才!非常感谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 2023-03-24
  • 2021-03-22
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
相关资源
最近更新 更多