Я пытаюсь запустить скрипт Ruby, который очищает какой-то URL-адрес и выполняет его из PHP.
Это мой код PHP:
PHP:
$url = 'https://www.example.com';
$result= shell_exec("ruby script.rb $url");
echo 'result is:';
echo $result;
У меня есть два разных кода, один основан на Curl, и он работает:
Рабочий код Ruby:
value = `curl #{ARGV[0]} | grep "findMe:"`
result = value.scan(/findMe: (.*)/).flatten.first.split('$').last.gsub(',', '').to_f
puts result
Но другой использует Mechanize Gem, и он не работает с PHP:
Нет рабочего кода:
require 'time'
require 'mechanize'
url = ARGV.first
begin
page = Mechanize.new.get(url).content
result = page.match(/findMe: "\$(.+)"/)[1].tr(',', '')
# Uncomment following line to see date and time in output
# output = Time.now.strftime('[%F %T %z] ') + result
# Uncomment following line to see only result in output
output = result
# Output the result on terminal
puts result
rescue => detail
puts detail.message
end
Но из SSH, используя Putty, оба сценария Ruby работают отлично.
Так как же может случиться так, что один из них не сможет выполнить PHP?
Обновить:
Как мне посоветовали, я изменил оболочку на:
$result = `ruby script.rb "$url" 2>&1`;
Это ошибка:
результат: script.rb: 2: в `require ‘: нет такого файла для загрузки — механизировать
(LoadError) из script.rb: 2
Может быть, это связано с путями, но я не уверен, как их правильно изменить
Задача ещё не решена.
Других решений пока нет …