2011-12-12 48 views
3

目标: 从wordpress页面运行简单的Rscript。从wordpress安装运行exec()Rscript

  • 我目前正试图在加载页面时使用exec()来运行Rscript。该脚本创建从整数1到10的100个随机样本的直方图,将系统时间写入标题并将图保存为.png文件。

设置

  • 运行的WordPress安装在Ubuntu EC2微实例
  • R已经被成功地安装和通过ssh
  • 使用Exec的-PHP WordPress插件使得PHP代码可以测试写入并执行(测试成功)

PHP代码(WordPress的页内)

<?php 
    echo "This is the Exec-PHP 'Hello World'\n"; 
    echo exec("date"); 
    ?> 

    <?php 
    exec("Rscript <PATH>/test.R"); 
    ?> 

    <img src="<Image Location>/samplePlot.png" alt="" title="Sample R" /> 

RSCRIPT - test.R

png("<Image Location>/samplePlot.png") 
    hist(sample(1:10, 100, replace = TRUE), main= Sys.time(), lwd = 5) 
    dev.off() 

图像文件加载,但它没有更新,说明RSCRIPT从来没有被执行。我已经将它归结为这个问题,但不确定这是为什么。

我该如何调试?我真的不知道任何PHP的,但我试过如下:

<?php 
    exec("\usr\bin\Rscript <PATH>/test.R", $output, $result); 
    echo $output; 
    echo $result 
    ?> 

将返回:

Array2 

我希望得到的命令行输出来检查错误。这可能吗?

+1

它按预期从命令行工作吗? r脚本需要多长时间才能运行 – 2011-12-12 22:55:27

+0

当我以普通用户的身份登录时,它确实有效。该脚本执行得非常快。这可能是一个权限问题吗?无法写入?我将如何检查这个?我无法从php exec()调用获取任何输出。 – bnjmn

+0

我猜脚本运行时,HTML发送给用户,所以他们下载旧版本的情节,而它正在更新 – hadley

回答

2

我认为问题在于你没有指定完整路径到Rscript,运行PHP/Apache的用户只是不知道在哪里搜索它。

更新exec命令一样(在Linux上):

exec("/usr/bin/Rscript <PATH>/test.R"); 

无论如何,我会建议供以后和(基于这样)任务安装littler为让事情捉迷藏r而不是Rscript运行速度快了很多 - 如果安装例如。 rApache不是一个选项。

+0

我最初使用完整的路径,并有相同的结果。在此期间,我会考虑小问题。 – bnjmn

+0

你有安装/配置的apparmor或类似吗?尝试从命令行以webserver用户的名义运行'Rcript'。 – daroczig

2

要得到这个问题的尝试的想法:

$e = exec("\usr\bin\Rscript <PATH>/test.R 2>&1"); 
var_dump($e); 

如果你喜欢的东西:在dyn.load错误(文件的DLLPath = DllPath的,...)... 你可能需要更新服务器动态库(尝试搜索libfreetype。dylib),或者如果你正在运行MAMP(因为我),你需要评论(#)这两个未注释的行:/ Applications/MAMP/Library/bin/envvars

我知道你已经很长时间这个问题,但我花了很多时间与类似的问题 - 希望有人可以节省一些时间;)

+0

虽然对于原始问题(引用在Ubuntu中运行,而不是在Mac OS X中)并没有真正的相关性,但我必须说 - 这结束了长达一小时的搜索,让我感到沮丧。即使修改了库文件的所有权,我也永远无法让MAMP甚至包括核心库(如统计信息),尽管它会加载RJSONIO。奇怪的。无论如何,评论这些行允许MAMP执行R脚本来查找它以前没有发现的dylib,这可能是包类统计信息的依赖关系。感谢分享! –