2017-04-07 32 views
1

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) { } 

壳牌输出:

$ 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 改性my_script.R如预期如果删除mongoDbConnect线PHP的作品:

#!/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" } 

壳牌输出:

$ 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的说法?

回答

0

您的代码看起来没问题。

试试这个丑陋的黑客:

​​3210
+0

现在,我得到的输出是:'字符串(0) “”' – rootkea

+0

如果我添加了'打印(I:5)另一个有趣的一点'*之前*'mongoDbConnect '保持前面的'print'完好,我得到的输出为:'string(10)“[1] 3 4 5”'。就好像'mongoDbConnect'失败了一样。但我可以验证它不是通过从shell运行。 – rootkea

+0

您是在命令行还是在Web服务器上运行PHP代码?如果它位于Web服务器-Apache,Nginx或其他任何地方,则检查哪个用户正在调用脚本,并确保用户有权运行它并读取/写入所需的文件夹或文件。在Apache上,用户最有可能是'www-data'。 – jotaelesalinas