php呼叫統計軟體R進行複雜計算並取得結果的技術實現

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程式文件,是重點,最後執行輸出文件,此文件為指令必須,但對我們沒有用處。

利用.user.ini檔案修改 open_basedir加強php系統安全性

.user.ini是lnmp文件,裡面放的是網站的資料夾路徑位址,目的是防止跨目錄存取和文件跨目錄讀取,從一定意義上,保證未知PHP程式碼可能帶來的潛在的安全性問題。

配置放在根目錄 .user.ini

open_basedir=/專案路徑/:/tmp/:/proc/     

例:

open_basedir=/www/www.a.com/:/tmp/:/proc/

值得注意的是,在上述路徑中,請一定要以斜線結尾,如果沒有用斜線結尾的話,則代表的是一系列以對應名稱開頭的目錄。例如:/user 代表的就是 /user(*)/ ,所以請一定要注意,斜線的使用。

同時,注意設定改文件的權限,要比根目錄程式碼權限高,防止被直接操作修改。


HTTPS://嗚嗚嗚.PHP.net/manual/這/configuration.file.普洱-user.PHP

HTTPS://news N.net/say/user-INI-more-safe.HTML

PHP頁面新增HTTP認證程式碼

// Digest HTTP Authentication
// To enable, add user: "name" => "password".
//$users = array();
$users = array(""=>"");

// If auth is enabled:
if (!empty($users)) {
    if (empty($_SERVER['PHP_AUTH_DIGEST'])) {
        header('HTTP/1.1 401 Unauthorized');
        header('WWW-Authenticate: Digest realm="' . $realm . '",qop="auth",nonce="' . uniqid() . '",opaque="' . md5($realm) .

shell環境下cron定時執行php程式里相對引用的問題

Linux系統下,利用cron定時執行php程式是一種便捷的處理方式,最近測試一段php腳本,瀏覽器呼叫調試一切正常,於是配置了shell定時,但第二天卻發現資料庫裡什麼都沒保存… …查看錯誤日誌,說是php某行錯誤,去查看這一行程式碼,發現是一個相對引用,之前這段腳本也定時執行過,執行的程式和引用的檔案在同一個資料夾裡邊,引用直接寫了檔名,沒出現問題,前一天規劃了一下目錄,順道改了下這個引用成../filename絕對引用,沒想到就是這的問題,錯誤顯示是解析到php server的目錄了。 。

解決方案:

加兩行程式碼,切換目錄:

$cur_dir = dirname(__FILE__); //获取当前文件的目录
chdir($cur_dir); //把当前的目录改变为指定的目录
require(../a.php); //引入相对路径文件


訂閱@標題