2011-12-12 50 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,這可能是包類統計信息的依賴關係。感謝分享! –