2017-04-07 115 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