Не спрашивайте почему мне этого захотелос. Ответ банальный - лень :)
Итак, в lib/ проекта кидаем файл php_bridge.rb следующего содержания
module PHPBridge
def self.send_to_php(file,req)
require 'uri'
req1 = []
req.env.each do |name,value|
req1.push("#{name}[=]#{value}")
end
params = URI.escape(req1.join("[|]"))
req1 = []
req.parameters.each do |name,value|
req1.push("#{name}[=]#{value}")
end
param = URI.escape(req1.join("[|]"))
`/usr/bin/php #{RAILS_ROOT}/wrappers/php-wrapper.php #{file} "#{params}" "#{param}"`
end
end
А в контроллер который должен вызвать необходимо написать что-то похожее на:
class TestController < ApplicationController
include PHPBridge
def index
@output = PHPBridge::send_to_php('test.php',request)
end
end
После этого при запросе вызовется файл wrappers/php-wrapper.php в который необходимо написать следующий код:
<?
$file = $argv[1];
$params = $argv[2];
$params = urldecode($params);
$params = explode("[|]",$params);
$params2 = array();
foreach($params as $value)
{
$tt = explode('[=]',$value);
$params2[$tt[0]] = $tt[1];
}
$_SERVER = $params2;
$params = $argv[3];
$params = urldecode($params);
$params = explode("[|]",$params);
$params2 = array();
foreach($params as $value)
{
$tt = explode('[=]',$value);
$params2[$tt[0]] = $tt[1];
}
$_GET = $params2;
$_POST = $params2;
require_once('php-code/' . $file);
?>
Вот и всё. Для теста я выводил переменные окружения.