2016-07-06 227 views
1

我想在PHP代碼中使用Apache Web服務器執行R腳本(名爲script.R)。 這裏是我的R代碼裏面:我安裝軟件包,然後導入數據,那麼我可以繼續對數據的分類樹:使用Apache服務器從PHP執行R腳本

library(lubridate) 
library(plyr) 
library(rpart) 
library(sqldf) 
library(survival) 
library(randomForest) 
library(rpart.plot) 

data=read.table(file = "t.txt",header = T,sep = ";",stringsAsFactors = T) 

input=read.table(file = "file.txt",header = T,sep = ";",stringsAsFactors = T) 

tree=rpart(sat~.,data,method="class") 


png("tree.png", width=1000, height=800, antialias="cleartype") 
plot(tree, uniform=TRUE, 
    main="Classification Tree") 
text(tree, use.n=TRUE, all=TRUE, cex=0.8) 

dev.off() 

我的PHP腳本必須執行該R腳本。它們被放置在 「C:\ Apache24 \ htdocs目錄」 與 「file.txt的」 和 「t.txt」

所以我的PHP文件包含在:

<?php 
exec("Rscript script.R", $results); 
print_r($results); 
?> 

,但我得到 「陣列()」

有什麼想法?

+1

嘗試使用'passthru()'獲取所有輸出。 'exec()'只返回最後一行:http://php.net/manual/en/function.passthru.php –

+0

同樣的結果!它返回「1」。我想這意味着執行工作,但我沒有情節(「tree.png」)。 也許R沒有安裝在服務器上。我怎麼能檢查它是否? –

回答

1

需要安裝R軟件包在系統範圍內的位置。在我的機器,這需要:

$ sudo R 
> install.packages("Rpkg", lib = "/usr/local/lib/R/site-library/") 

說明

我看你已經安裝了幾個R包。我猜你已經將它們安裝在默認位置,即用戶主目錄。

因此,如果您嘗試從命令行執行的R腳本,像:

$ php foo.php 

你會看到腳本被成功執行(代碼假設其餘爲無bug)和按預期方式調用script.R

但是,當您嘗試從apache執行php時,這會失敗。原因是因爲你已經在家目錄中安裝了R包,所以他們無法訪問到www-data,這是在apache下執行php的用戶。

相關問題