Подавить заголовки PHP, работающие с PHP cgi из Ruby - PullRequest
0 голосов
/ 04 июня 2010

По общему признанию, это странная проблема для меня, но вот что я делаю:

У меня есть скрипт на Ruby, который выполняет строку кода PHP и захватывает вывод.

Это в некоторой степени связано с другой проблемой, с которой у меня была при запуске 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 />"

Действительно странная вещь, которую я не могу понять, это то, что PHP-код здесь ведет себя иначе, когда я запускаю скрипт Ruby из командной строки и из CGI. Что на самом деле не имеет смысла для меня, потому что в любом случае я выполняю ту же строку PHP из команды с теми же аргументами.

Когда я запускаю указанный выше скрипт Ruby из командной строки, я получаю ожидаемый вывод:

Тип содержимого: текст / html

Начало вывода PHP
Привет, конец мира Вывод PHP

Когда я запускаю тот же самый скрипт Ruby из браузера через CGI, я получаю такой вывод:

Запуск вывода PHP
X-Powered-By: PHP / 5.2.13 Тип содержимого: текст / html
ставит "Тип контента: текст / html \ n \ n" ставит «Начать вывод PHP
» echo 'hello world' | php5 -q пут "End PHP Output
" End PHP Выход

Мне кажется, что то, что происходит, состоит в том, что строка PHP не подавляет заголовки, как я ожидаю, что опция -q сделает ..., а также выводит весь мой скрипт Ruby обратно в браузер. - что сбивает меня с толку.

Есть мысли?

Заранее спасибо!

1 Ответ

1 голос
/ 04 июня 2010

Насколько я могу судить, 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 />"
...