1. 程式人生 > >關於PHP的$_SERVER{'HTTP_USER_AGENT'}匹配不到Mozilla的奇怪bug

關於PHP的$_SERVER{'HTTP_USER_AGENT'}匹配不到Mozilla的奇怪bug

今天在玩耍PHP,根據官方手冊http://php.net/manual/zh/tutorial.useful.php,編寫了一個指令碼

具體就是根據$_SERVER{'HTTP_USER_AGENT'}的返回值,判斷瀏覽器的種類,輸出相應的資訊,首先來看看這個變數在我的QQ瀏覽器上反悔了什麼

<?php
header("Content-Type: text/html; charset=utf-8");
echo '<p>Hello World</p>';
echo '<p>';
echo $_SERVER{'HTTP_USER_AGENT'};
echo '</p>';

當我看見Mozilla,我的記憶中那好像和火狐瀏覽器有關,此刻我並沒有在意為什麼我的QQ瀏覽器會顯示Mozilla,學著官網寫了一段判斷瀏覽器型別的程式碼

if(strpos($_SERVER{'HTTP_USER_AGENT'}, 'Mozilla') != FALSE) {
    echo '正在使用火狐瀏覽器';
}

然後重新執行,發現語句並沒有執行成功,經過我的各種嘗試,$_SERVER{'HTTP_USER_AGENT'}的一長串返回值中,任何字串都是可以成功匹配的,比如QQBrowser、Chrome、Safari

if(strpos($_SERVER{'HTTP_USER_AGENT'}, 'QQ') != FALSE) {
    echo '正在使用QQ瀏覽器';
}
if(strpos($_SERVER{'HTTP_USER_AGENT'}, 'Safari') != FALSE) {
    echo '正在使用Safari瀏覽器';
}
if(strpos($_SERVER{'HTTP_USER_AGENT'}, 'Chrome') != FALSE) {
    echo '正在使用谷歌瀏覽器';
}

甚至“ozilla”都是可以匹配到的,唯有“Mozilla”這個單詞匹配不到,在網上進行了一番搜尋都沒有找到答案,我甚至還看完了瀏覽器為什麼user agent資訊都帶著Mozilla的原因

https://www.zhihu.com/question/19553117

扯遠了,扯回來,再次嘗試debug

寫了一個echo語句,看一下strpos($_SERVER{'HTTP_USER_AGENT'}, 'Mozilla')到底返回什麼

echo strpos($_SERVER{'HTTP_USER_AGENT'}, 'Mozilla');

返回值是0,表示子字串在0位置出現,一切都沒有問題

突然電光火石之間我想起了一個關於JavaScript三位一體的傳說

 所以有沒有可能在PHP裡面(0 == False)呢,實驗了一下

if (0 == FALSE) {
    echo 'WTF';
}

行吧