近年來(lái)互聯(lián)網(wǎng)發(fā)展日新月異,為適應(yīng)多種終端設(shè)備對(duì)網(wǎng)站的訪問(wèn)需求,我們常常需要對(duì)網(wǎng)站進(jìn)行自適應(yīng)或響應(yīng)式設(shè)計(jì)。UA(User Agent)就是識(shí)別用戶終端信息的關(guān)鍵,此時(shí)需要了解php ua修改來(lái)避免各種問(wèn)題。
當(dāng)用戶使用不同的終端訪問(wèn)網(wǎng)站時(shí),瀏覽器會(huì)向服務(wù)器傳遞用戶代理字符串(User-Agent),告訴服務(wù)器瀏覽器的類型、操作系統(tǒng)、分辨率等等。通過(guò)UA的特征判斷,我們可以實(shí)現(xiàn)瀏覽器兼容、設(shè)備適配、訪問(wèn)限制、爬蟲(chóng)過(guò)濾等等功能。
UA字符串是由瀏覽器或app程序設(shè)置的,我們可以通過(guò)一些技巧修改UA字符串,例如:針對(duì)Chrome瀏覽器發(fā)起的請(qǐng)求,我們可以為其設(shè)置UA為IE11,來(lái)迫使瀏覽器出現(xiàn)向IE11相同的頁(yè)面表現(xiàn)。當(dāng)然,這種做法可能帶來(lái)合法性問(wèn)題,因?yàn)橛行┚W(wǎng)站會(huì)根據(jù)UA限制部分功能。
//修改UA示例1 function changeUserAgent($ua){ if(@$_SERVER['HTTP_USER_AGENT']){ $_SERVER['HTTP_USER_AGENT'] = $ua; } } changeUserAgent("Opera/9.8 (Windows NT 6.0; U; en) Presto/2.6.30 Version/10.61");
UA修改還可以用于爬蟲(chóng)屏蔽,例如我們想讓爬蟲(chóng)無(wú)法爬取某網(wǎng)站,可以在最開(kāi)始的引導(dǎo)腳本中,檢查UA并禁止api及樣式數(shù)據(jù)的輸出。當(dāng)然,這種方法并不是百分百有效,因?yàn)楝F(xiàn)在的爬蟲(chóng)已經(jīng)進(jìn)化出了大量的UA劫持插件。
//修改UA示例2 function checkUA(){ $blacklist = ['curl','spider','bot','robot','slurp','facebook','google','bing','msn','pingdom']; foreach($blacklist as $harmful){ if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),$harmful) !== false){ exit; } } } checkUA();
在進(jìn)行自適應(yīng)和響應(yīng)式設(shè)計(jì)時(shí),我們需要根據(jù)設(shè)備類型和分辨率的不同,動(dòng)態(tài)調(diào)整頁(yè)面布局和元素樣式。例如我們可以介紹一個(gè)常見(jiàn)需要UA判斷的場(chǎng)景,PC機(jī)和移動(dòng)設(shè)備的導(dǎo)航欄顯示方式不同。
//修改UA示例3 if(strpos(strtolower($_SERVER['HTTP_USER_AGENT']),'mobile') !== false){ //移動(dòng)設(shè)備適配 }else{ //PC適配 }
以上是幾個(gè)常見(jiàn)的UA修改場(chǎng)景,在實(shí)際場(chǎng)景中需要依據(jù)實(shí)際需求和設(shè)備特性來(lái)選取合適的技術(shù)方案??傊?,UA字符串的修改可以為我們帶來(lái)很多應(yīng)用和體驗(yàn)上的提高,也要防止被利用作為惡意攻擊方式。