我想从我的ruby代码中调用php脚本。从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字符串作为参数传递吗?
答案 0 :(得分:3)
您可以使用反引号语法进行系统调用。
但问题实际上是你需要将-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
)