2016-07-06 14 views
1

Apache WebサーバでPHPコード内に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 

あなたはスクリプトが正常に実行されることを確認できます(コードの仮定残りはバグは無料です)とscript.Rが期待通りに呼び出されます。

しかし、これはApacheからphpを実行しようとすると失敗します。その理由は、あなたがRパッケージをホームディレクトリにインストールしたため、www-dataにアクセスできないということです。これは、apacheの下でphpを実行するユーザーです。

関連する問題