2011-10-30 70 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并获得它的输出。如果您提出的脚本仅用于演示目的,那么只是可以的,但是如果您要在网页上使用该脚本,请注意,使用表单输入进行系统调用绝不是一种好的安全措施。有多种非常严重的注射攻击可以完成。

这就是说,在确定Rscript可执行文件位于您的路径中并提供了my_rscript.r的完整路径(不仅仅是脚本名称,因为PHP可能会从其他路径执行命令,其中脚本可能会执行R &可以),则可能使用以下准则来获取脚本标准输出&标准误差(安藤也标准输入,这将允许用户从命令行,而是直接来自R标准输入不能通过输入:

check the output of php exec always returns empty array

1

exec(“。\ R \ R-3.1.3 \ bin \ Rscript。\ R \ R-3.1.3 \ bin \ my_rscript.R $ N”); 将r文件夹并把它放在同一个目录中,比如假设我使用的是xxamp,然后将R文件夹粘贴到htdocs中。