-
1 # 猿話
-
2 # 雁塔菜農
前端html+js一般是不能直接呼叫後端php中的函式的並返回結果的。
菜農在學習網站程式設計後,就被此事困擾很長時間。
因為前端的js可以透過ajax技術帶引數訪問後端的php過程,並返回結果。
那麼是否js也能帶引數訪問任意php函式並返回結果?
菜農在網友的指點下完成此設想並測試透過!
其核心思想是透過js的ajax呼叫php的call_user_func_array()函式,以實現任意php函式的呼叫。
特別注意:
為了網站的安全和防止駭客的攻擊,特別設立了$funclst陣列,js只能呼叫$funclst陣列內的特定函式。
php核心程式碼為:
$funclst = array("f0", "f1", "f2", "a1", "a2", "a3", "a4", "HotCount");
$func = $_REQUEST["function"];
if(in_array($func,$funclst) && function_exists($func)){//只能呼叫例程函式
if(isset($_REQUEST["age"]) && strpos(strtolower($_REQUEST["age"]), "http://")){
echo "函式$func()的引數中包含非法字元!!!";
} else {
$age =isset($_REQUEST["age"])? explode(",",$_REQUEST["age"]) : array();//引數以","分割
echo call_user_func_array($func,$age);
}
}else{
echo "函式$func()不存在!!!";
}
javascript透過Ajax直接呼叫任意PHP函式多引數例程
菜農在網友的指點下完成此例程,非常感謝!!!
如圖所示,前兩個分別是html和php的原始碼(csv記憶體儲了訪問該測試函式的次數,即網站訪問計數器。
回覆列表
不管是靜態頁面還是動態頁面,最終呈現給使用者的都是由HTML、CSS、JS等組成的,瀏覽器能解析的內容。
HTML模版與PHP的結合方式有三種:
混合程式設計使用模版引擎前後端分離混合程式設計
混合程式設計就是一個檔案裡既有HTML程式碼,也有PHP程式碼,這是PHP早期的開發模式。
使用模版引擎
由於在混合程式設計模式下,PHP檔案裡既有HTML程式碼,也有PHP程式碼,極不方便前端人員和後端人除錯。這時候就有人提出可以模板引擎將模板檔案與PHP程式碼分開開發,前端人員需要在模版檔案裡使用資料時就先用一些特殊的標籤位代替,等頁面渲染時模板引擎再把這些標籤位使用PHP程式碼代替。PHP裡比較常用的模版引擎有Smarty,QuickSkin……一些主流的框架也會內建自己的模版引擎。
前後端分離
模板引擎的使用雖然一定程度上將模板檔案和PHP程式碼分離開來,但模版引擎裡一些特殊的標籤,可能有時候還是得需要後端人員操作,這樣就導致前端人員和後端人員之間還是會有一些牽制,從而影響開發效率。
那如何排除前後端開發的相互干擾呢?答案:前後端分離。
前後端分離是將前端開發和後端開發隔離開來,前端開發人員只負責HTML、JS、CSS,後端人員只負責PHP,兩者的互動只會透過介面呼叫的方式,如使用Ajax。前後端分離真正做到了前後端人員的相互分離,互不打擾,但相對而言也對前端人員產生了挑戰,因為前端人員現在要知道如何處理資料。
隨著現在終端越來越多,前後端分離將是一個必然的趨勢。