php作為web程式開發的主要語言,應用廣泛。 R作為一種統計軟體,在數學演算法的實作上具有良好的可操作性。最近,由於工作的需要,要對一些web應用的資料進行複雜的數學計算,但php本身雖然可以寫一些數學演算法,但仍難以滿足需求,數十行程式碼的效率抵不上R中的一個函數,經過研究,最終實現了在php的即時存取中呼叫R進行計算操作,並直接讀取計算結果,在web頁面中進行顯示。大概思路如下:

重點在於php激活R程式運行,並向R傳遞計算參數,獲得結果。

php激活R,可以採用內建函數exec,這樣只要在作業系統運行視窗執行的命令都可以在此執行,R執行的命令為(以下均指在windows環境下)

"D:\\Program Files\R\R-2.15.2\bin\x64\R.exe" --vanilla < D:\\test.R  out.txt

第一部分為本機的R程式的路徑,後邊加R軟體的option,可自訂,後加要執行的R程式文件,是重點,最後執行輸出文件,此文件為指令必須,但對我們沒有用處。

為了實現對php頁面的每一次訪問,因參數不同,分別執行不同的R程序,所以,test.R的程序文件名需要每次訪問生成一個,保證每次訪問都有一個唯一的R程序文件,在其中使用寫入文本文件的形式存儲參數名和參數值,指定結果文件名,在php頁面中指定激活該R文件,在該文件中可以指定調用複雜的固定文件名的R程序文件,運行後生成唯一的結果文字文件,php檔案再去讀取該文字檔案的結果,進行處理進而顯示出來,也就是實現目的。

exec($command,$out1,$out2);

php輸出結果中,只要$out2的值為0,即為執行成功。

需要注意的是,檔案路徑用的反斜杠,在php中反斜杠的特殊的轉義符號,生成$command時,需要特別注意輸出字串是否符合要求。另外,對於檔案的儲存等,盡量使用絕對路徑。


發表評論