2011-10-30 4 views
4

私は、以下のものを使用してPHPからRスクリプトを実行しようとしている:RとPHPの統合

echo "<form action='poorman.php' method='get'>"; 
echo "Number values to generate: <input type='text' name='N' />"; 
echo "<input type='submit' />"; 
echo "</form>"; 

if(isset($_GET['N'])) 
{ 
    $N = $_GET['N']; 

    // execute R script from shell 
    // this will save a plot at temp.png to the filesystem 
    exec("Rscript my_rscript.r $N"); 

    // return image tag 
    $nocache = rand(); 
    echo("<img src='temp.png?$nocache' />"); 
} 

と私のRスクリプトは以下の通りです:

args <- commandArgs(TRUE) 

N <- args[1] 
x <- rnorm(N,0,1) 

png(filename="temp.png", width=500, height=500) 
hist(x, col="lightblue") 
dev.off() 

そのは一時を生成しません。 png

rスクリプトは問題ありませんが、PHPからこのスクリプトを実行できないようです。どんな助けでも大変感謝していますか?

メモ私はubuntuを使用しています。 ありがとう、

+1

私はあなたがRスクリプトを直接実行したことをテストし、その場合に望ましいpngを生成することを確認していると仮定していますか? – joran

+0

はい、うまく動作します – jkjk

+0

可能な複製:http://stackoverflow.com/questions/4818641/using-r-through-php – aL3xa

答えて

5

はい、あなたはPHPからRを呼び出してその出力を得ることができます。あなたが提案したスクリプトがデモ目的のものであればOKですが、Webページ上でそのスクリプトを使用する場合は、フォームからの入力を使用してシステムコールを行うことは決して安全ではありません。実行可能な複数の非常に重大な注入攻撃があります。

言い換えれば、PHPがR &のスクリプトがこのような別のパスからコマンドを実行する可能性があるので、Rscript実行ファイルがあなたのパスにあり、フルパスをmy_rscript.rに提供した後(スクリプト名だけでなく、

check the output of php exec always returns empty array

1
:)あなたは、コマンドラインからではなく、直接Rの標準入力からではない入力を渡すことができるようになると、スクリプトの標準出力&標準誤差(も安藤標準入力をつかむために、次のガイドラインを使用することができます

exec( "。\ R \ R-3.1.3 \ bin \ Rscript。\ R \ R-3.1.3 \ bin \ my_rscript.R $ N"); rフォルダをコピーします。 xxampを使ってhtdocsにRフォルダを貼り付けているとします。