Я хочу вызвать php-скрипты из моего кода ruby. Из ruby он должен передать аргументы php в качестве аргументов командной строки. Но для аргумента с пробелами это воспринимается как команда.
Например:
result = 'php sample.php "#{name}" "#{location}"'
Возвращается
sh: line 1: Blahh Blahh: command not found
sh: line 2: Some more Blahh: command not found
Кто-нибудь может сказать, как передать строку ruby в качестве аргумента ??
Вы можете использовать синтаксис backticks для системных вызовов.
Но проблема в том, что вам нужно пройти -f
опция PHP, чтобы сказать PHP выполнить файл вместо попытки запуска аргументов командной строки.
test.rb:
path = File.dirname(__FILE__) + '/'
args = ['arg1', 'arg2']
puts `php -f #{ path + 'sample.php'} { args.join(' ') }`
sample.php
<?php
if (isset($argv)){
print_r($argv);
}
Выход:
Array
(
[0] => ./sample.php
[1] => arg1
[2] => arg2
)
редактировать
Вы также можете использовать компонент StdLib Shellwords чтобы избежать и привести аргументы для вас:
require 'shellwords'
path = File.dirname(__FILE__) + '/'
args = ['arg1', 'arg2 asdas']
puts `php -e #{ path + 'test.php'} #{ Shellwords.join(args) }`
Выход
Array
(
[0] => ./test.php
[1] => arg1
[2] => arg2 asdas
)
Других решений пока нет …