php exec()不会将输出存储在$ output参数中

时间:2017-04-07 06:07:32

标签: php r

我的index.php

<?php
    $n = 3;
    exec("Rscript my_script.R $n", $out);
    var_dump($out);
<?

my_script.R

#!/usr/bin/env Rscript

i <- as.numeric(commandArgs(TRUE))
rootkea <- mongoDbConnect('rootkea')
print(i:10)

输出:

array(0) { }

Shell输出:

$ Rscript my_script.R 3
Loading required package: rJava
Loading required package: methods
[1]  3  4  5  6  7  8  9 10

有趣的是,如果我从mongoDbConnect删除my_script.R行,则php会按预期工作 已修改my_script.R

#!/usr/bin/env Rscript

i <- as.numeric(commandArgs(TRUE))
#rootkea <- mongoDbConnect('rootkea')
print(i:10)

输出:

array(1) { [0]=> string(27) "[1] 3 4 5 6 7 8 9 10" } 

Shell输出:

$ Rscript my_script.R 3
Loading required package: rJava
Loading required package: methods
[1]  3  4  5  6  7  8  9 10

在打印结果之前,我需要在my_script.R 中进行数据库连接和其他处理。如何使exec将输出存储在$out参数中?

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错。

试试这个丑陋的黑客:

$temp = tempnam(null, null);
$temp2 = tempnam(null, null);
exec("Rscript my_script.R $n > \"$temp\" 2> \"$temp2\"");
$out = file_get_contents($temp);
$err = file_get_contents($temp2);
unlink($temp);
unlink($temp2);