将数组从bash传递给PHP

时间:2017-07-26 11:22:52

标签: php bash

是否有可能做这样的事情以获得下面的输出。

myArray='\${array("Red","Green","Blue")};'
echo $myArray

PHP

$ScriptData = "${shell_exec('script.sh')}:"
var_dump($ScriptData);

输出:

array(3) { 
    [0]=> string(3) "Red" 
    [1]=> string(5) "Green" 
    [2]=> string(4) "Blue" 
}

5 个答案:

答案 0 :(得分:2)

是的,您也可以使用' exec'函数,它返回脚本的输出:

$output = array();
exec('script.sh', $output);
var_dump($output);

但是我认为如果你的shell脚本输出一个逗号分隔的列表并在php端爆炸它会更安全:

$output = explode(',', shell_exec('script.sh');

答案 1 :(得分:1)

只需在PHP中执行此操作

$data = shell_exec('path/to/script.sh');

答案 2 :(得分:1)

让shell脚本在单独的行上输出每个条目更容易:

myArray=(Red Green Blue)
for i in ${myArray[*]}; do
    echo $i
done

使用exec()函数从PHP运行shell脚本,并将数组变量作为其第二个参数传递。执行命令的每一行输出都被添加到该数组中,没有尾随换行符。

$output = array();
exec('script.sh', $output);
print_r($output);

它会准确生成您在问题中发布的输出。

答案 3 :(得分:1)

简单而强大的是交出json编码的数组:

#!/bin/bash
myArray="'[\"Red\",\"Green\",\"Blue\"]'"
php -r "var_dump(json_decode($myArray));";

输出是:

array(3) {
  [0]=>
  string(3) "Red"
  [1]=>
  string(5) "Green"
  [2]=>
  string(4) "Blue"
}

答案 4 :(得分:0)

也可以使用eval

myArray='$data = array("Red","Green","Blue");'
echo $myArray

PHP

$ScriptData = shell_exec("sh script.sh");
echo $ScriptData;
# $data = array("Red","Green","Blue");

eval($ScriptData);
print_r($ScriptData);
# Array
# (
#   [0] => Red
#   [1] => Green
#   [2] => Blue
# )