我的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
参数中?
答案 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);