在ruby代码中调用php脚本

时间:2014-11-07 11:33:03

标签: php ruby-on-rails ruby string

我想从我的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字符串作为参数传递吗?

1 个答案:

答案 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
)