拿到一個(gè)項(xiàng)目,想要完美的執(zhí)行,則必須要有能夠與后端相應(yīng)的溝通和工作能力。而更近幾年來,很多網(wǎng)站前端選手,對(duì)于后端得到的數(shù)據(jù)是通過接口完成的并不是很了解。那么對(duì)于Web后端開發(fā)者來說,如果我們需要通過PHP代碼獲取數(shù)據(jù)呢?下面就讓我們來一探究竟。
PHP作為一種服務(wù)器端腳本開發(fā)語言,除了能夠?qū)崿F(xiàn)頁面渲染外,其核心功能即包含了對(duì)apache等web服務(wù)器的支持,在web開發(fā)中扮演著重要角色。因此,通過php來獲取后端數(shù)據(jù)是很常見的操作。
在PHP中,獲取數(shù)據(jù)的方式可以包括:$_GET、$_POST、SQL查詢、FileSystem輸入輸出、Web服務(wù)等方式。對(duì)于想要獲取其他服務(wù)器端的資源,也可以通過CURL庫(kù)或其它協(xié)議來獲取。下面我們著重講解以下三種方式:
第一種:通過使用cURL
cURL是一種用于獲取站點(diǎn)上的數(shù)據(jù)的類庫(kù)和工具,它支持多種協(xié)議,如:FTP、TELNET、HTTP、HTTPS和FILE等。它還可以用來上傳文件和POST數(shù)據(jù)等功能。首先,需要在PHP中開啟cURL擴(kuò)展,具體擴(kuò)展方法可參考PHP官方文檔。以下是簡(jiǎn)單的cURL代碼例子:
//初始化cURL $curl = curl_init(); //設(shè)置選項(xiàng) curl_setopt($curl, CURLOPT_URL, "http://www.example.com"); //執(zhí)行cURL $result = curl_exec($curl); //關(guān)閉cURL資源,并釋放系統(tǒng)資源 curl_close($curl); //輸出結(jié)果 echo $result;以上代碼中,首先使用curl_init()函數(shù),初始化一個(gè) cURL 對(duì)象,然后使用curl_setopt()函數(shù)設(shè)置這個(gè)對(duì)象的選項(xiàng),比如URL地址、數(shù)據(jù)傳輸相關(guān)選項(xiàng),操作方法類型等等。 第二種:通過使用file_get_contents函數(shù) file_get_contents()是一個(gè)可選參數(shù)的PHP函數(shù),接受一個(gè)文件名或URL地址作為參數(shù),返回文件輸出。它提供了一個(gè)簡(jiǎn)單的能力,可以代替fopen/fsockopen函數(shù)并快速的讀取一個(gè)遠(yuǎn)程文件的數(shù)據(jù)。以下是簡(jiǎn)單的file_get_contents代碼例子:
//設(shè)置選項(xiàng) $options = array('http' =>array('user_agent' =>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:81.0) Gecko/20100101 Firefox/81.0')); //建立并獲取文件內(nèi)容 $content = file_get_contents('http://www.example.com', false, stream_context_create($options)); //輸出文件內(nèi)容 echo $content;以上代碼中,設(shè)置一個(gè)$option選項(xiàng)用來設(shè)置header,即用戶代理user_agent,然后使用file_get_contents()函數(shù)獲取并讀取一個(gè)URL中的輸出。 第三種:通過使用fsockopen函數(shù) fsockopen是一個(gè)PHP函數(shù),可以用來打開一個(gè)網(wǎng)絡(luò)連接并取得socket的資源號(hào)。這個(gè)函數(shù)常用于建立一個(gè)客戶端連接到另一臺(tái)服務(wù)器或打開對(duì)本地計(jì)算機(jī)指定端口的連接。以下是簡(jiǎn)單的fsockopen代碼例子:
//建立IP地址和端口 $ipaddr = '127.0.0.1'; $port = 80; //建立socket連接 $socket = fsockopen($ipaddr, $port); //確定請(qǐng)求消息體 $request = "GET / HTTP/1.1\r\nHost: www.example.com\r\nConnection: Close\r\n\r\n"; //發(fā)送請(qǐng)求 fwrite($socket, $request); //接收相應(yīng) $response = ''; while (! feof($socket)) { $response .= fgets($socket, 1024); } //關(guān)閉連接 fclose($socket); //輸出結(jié)果 echo $response;以上代碼中,首先建立一個(gè)IP地址和端口,然后使用fsockopen()函數(shù)建立一個(gè)socket連接,接著定義一個(gè)請(qǐng)求消息體$request,并把該消息體發(fā)送到建立的socket中。然后接收響應(yīng)消息,并關(guān)閉socket。 通過以上三種方式,我們可知如何通過PHP獲取到后端數(shù)據(jù),當(dāng)然僅僅是通過PHP獲取數(shù)據(jù)的方式還不夠,更重要的是,我們還需要對(duì)整個(gè)網(wǎng)站的性能進(jìn)行處理,不單單是前端的性能優(yōu)化,后端同樣也是至關(guān)重要的。真正優(yōu)秀的開發(fā)者,不僅要精于技術(shù),還要注重團(tuán)隊(duì)協(xié)作,讓團(tuán)隊(duì)一起為用戶創(chuàng)造更好的體驗(yàn)。