2011-11-05 49 views
3

我有一个R脚本运行得很好,当我从命令行运行它并将映像保存到文件系统时。但是,当我运行它从PHP脚本使用以下命令:在ubuntu下运行R在php下

exec("cat my_rscript.R | /usr/bin/R --vanilla"); 

它不运行。请注意,当我在命令行中运行它时,我正在使用完全相同的调用。我很确定我在正确的目录中(php文件和R脚本位于相同的目录中)。可能是因为我无法从php运行R脚本?我认为这与我运行R-64位和php的事实只有32位有关,但我不确定这是否是问题所在。

+0

我的第一个猜测是您执行PHP调用的用户无法访问一个或多个资源(文件系统方式)。 –

+0

你的意思是访问R脚本或文件夹? – jkjk

+0

两者。如果用户('apache'?)无法访问或者,那么你可能不会有任何输出。 –

回答

2

我建议以下步骤来调试,这一切通过命令外壳,从PHP:

  1. 获取的which R输出(确保它的路径)(例如which R > where_is_r.txt
  2. 获取shell开始执行的位置,即R被调用的路径(应该是“where_is_r.txt”文件的位置)
  3. 创建一个简单的helloworld.r(例如写入正态分布随机值到文本文件),并执行Rscript --vanilla /path/to/helloworld.r
  4. 替换helloworld.r与你的脚本,并执行Rscript --vanilla /path/to/my_script.R

如果这些不露哪里出了问题,你可能需要保存错误输出(STDERR)和输出(stdout)。这可以在R内完成,但最好通过bash来完成。有关如何执行此重定向的指南,请参阅this page

此外,通常最好使用完全指定的路径,而不是依赖于在特定目录中调用的shell。完整的规范可以是绝对路径或相对路径,但相对路径和符号链接比绝对路径更难调试。