Есть два разных способа сделать это:
\ 1. В ruby настройте не HTTP-сервер, который слушает только '::' (или 127.0.0.1, если вам не нравится ipv6). Затем каждый раз, когда ваш PHP-скрипт должен что-то делать, он может подключиться к серверу и передать ему данные. Это было бы самым быстрым решением, потому что скрипт ruby не нужно запускать каждый раз, когда PHP должен что-то делать.
Пример Ruby:
require 'mechanize'
require 'socket'
def do_mechanize_stuff(command, *args)
case command
when 'search_google'
# search google with args.join(' ')
when 'answer_questions_on_stackoverflow'
# answer questions on stackoverflow
# with mechanize
end
'the result to pass to PHP'
end
srv = TCPServer.new '::', 3000
loop do
Thread.new(srv.accept) do |sock|
sock.write(
do_mechanize_stuff *sock.gets.split(' ')
)
sock.close
end
end
Пример клиента Ruby: (вам нужно будет перевести это на PHP)
require 'socket'
# This is a script that searches google
# and writes the results to stdout.
s = TCPSocket.new 'localhost', 3000
s.puts 'search_google how to use a keyboard'
until (r = s.gets).nil?
print r # a search result.
end
Вы можете использовать инструменты наблюдения за процессом, такие как http://god.rubyforge.org/, чтобы сервер работал.
\ 2. Сделайте скрипт ruby утилитой командной строки и используйте exec
в PHP для его вызова.
Пример сценария командной строки:
require 'mechanize'
def do_mechanize_stuff(command, *args)
# ... from previous example
end
do_mechanize_stuff ARGV.shift, ARGV