PHP前後端互動

是程式喵哇發表於2023-05-10
PHP是現如今十分流行的輕量級語言,經常用來做應用的後端開發,其特點是語法簡單,十分容易上手。除了單獨做後端,PHP還能夠將程式嵌入到HTML檔案中執行,非常容易實現簡單的前後端互動。而且PHP的執行很輕鬆,只要下載PHP環境並開啟服務,就能透過訪問檔案的形式執行PHP檔案,並且獲得其返回的資料了。但是可惜由於很多原因,PHP不太適合複雜和安全性要求高的大應用,所以求職方面,可能不如Java後端等吃香。但是如果你只是需要為自己的應用寫個簡單的後臺,或者是像我一樣在學校裡做做專案,參加參加比賽,那麼PHP還是一個不錯的選擇的。
 
接下來就正式開始入門內容。首先,基本的語法我就不贅述了,有點程式設計經驗的話自己去看會兒檔案,知道個大概就行了,具體的實在不行到時候用到再百度也沒事。最核心的就是,被<?php ?> 這個標籤包裹下的語句,都會被解析成php程式碼然後執行。比如下面這個最簡單的例子,只要把這個php檔案放在PHP環境下,就能夠輸出內容了。具體的PHP環境安裝我就不多說了,常見的有PHPStudy、XAMPP、WAMP等等整合環境,Linux下也只用幾條指令就行,也基本上沒有什麼坑,裝好就能直接用了。
 
<?php
echo "Hello World!";
?>
 
明白了PHP大概是怎麼運作的,我們就可以利用PHP實現很多功能了,比如說實現最簡單的前後端互動,前端透過Ajax傳送一個get請求到我們的後端,獲取後端返回的資料。
 
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET", "https://mu-mu.cn/1.php", true);
xmlhttp.send();
xmlhttp.onreadystatechange = function() {
if(xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log(this.responseText);
}
}
 
這裡就會出現第一個小問題了,那就是跨域請求,具體的內容我以後有時間希望能夠專門寫一篇博文來詳細地講,現在就先說個大概吧。首先,域=協議名+主機名+埠號,只要你訪問的域中有一個是不同的,那麼你的這次請求就是跨域的,這麼做是為了安全性,網路世界可不是法外之地,怎麼能隨隨便便想去哪裡就去哪裡呢。
 
解決的方法很簡單,常用的方法有兩種。第一種是把前後端放在同一個域下,這樣你的後端介面就只處理來自你部署於同一個域下的應用的請求了。第二種方法是後端進行設定,比如新增允許跨域的header頭。這樣子所有人都能夠訪問你的後端了,當然也可以設定白名單稍做限制。關於什麼是header頭以及更多請求的內容,以後有機會再說吧。
 
<?php
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE");
header('Access-Control-Allow-Headers:x-requested-with,content-type');
return "111";
?>
加上header頭之後,開啟控制檯,再次訪問,果然就沒有問題了,透過這種方式,我們就實現了最簡單的向後端獲取資料,不過這樣子獲取到的資料都是靜態的寫死的,不能滿足我們的大多數需求,所以之後還得連線資料庫,以及對資料庫進行操作。
 
 
獲取資料是沒問題了,那怎麼向後端傳送資料呢?其實也很簡單,之前講過Ajax傳送資料的簡單方法有兩種,一種是放在url種,透過GET方法傳送,另一種是放在body裡面,透過POST方法傳送。
//GET方法只需修改url,透過?引數名=值&引數名=值的形式傳送資料
xmlhttp.open("GET", "https://mu-mu.cn/1.php?name=mumu", true);
//後端
$name = $_GET['name'];


//POST方法 POST傳送資料的方式多種多樣,可以以表單、json、編碼字元等形式傳送,只需要設定請求頭就可以了
let data = "name=mumu";
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send(data);
//同樣後端獲取前端POST資料的形式也是相應變化的,常見的有兩種:
$_POST['fieldname']或者$_REQUEST['fieldname']對應x-www-form-urlencoded,也就是表單傳送過來的資料
file_get_contents("php://input");可以獲取任何POST資料,但是還要自己對資料進行處理

 

相關文章