把網站從PHP5.4移到PHP5.6的那些坑——第二話:PHP版本不一樣還怎麼愉快玩耍

【README.md】

Hi 我是栗子君,一枚身在美帝的小程序員。

我工作的公司一共有四個人:飲水機指定換水工兼老闆的邁叔,維持著一切讓業務不至於垮掉的產品經理田田,顏值擔當吉米還有吐槽擔當的我。

就像銀魂里的萬事屋,我們經常會接到各種客戶奇奇怪怪的委託,每天都要面對不一樣的技術問題。生活在充滿挑戰(shui shen huo re)的環境里的我決定開通這個專欄,來記錄每一個挑戰,每一次嘗試,每一種解決方案,希望能夠幫到遇到同樣問題的你(圍笑)。

正確打開方式:

【太長不看】--> 沒時間或者沒興趣閱讀全文的話也沒關係,只要看【太長不看】標籤就可以 get到要點。

【原文鏈接】--> 參考的材料以及資源的鏈接。

【請講人話】--> 會對一些術語做出盡量通俗的解釋,如果有另外需要解釋的術語請在評論區 留言~我會在文中更新

歡迎轉發!歡迎點贊!轉載請聯繫專欄作者授權。

1.抓取request url的正確姿勢

【太長不看】$_GET[URL]並不能抓取當前url,需替換成$_SERVER[REQUEST_URI]

看別人的代碼debug很像扮演偵探,需要一步步抽絲剝繭找到癥結所在 ( ?° ?? ?°)

讓代碼在localhost:8888上跑著,xdebug準備就緒:

啊啊啊啊啊啊啊啊這是怎麼回事!放我出去!

在經歷了不下二十遍的xdebug逐行運行後終於大概摸清了這個項目routing的邏輯:index.php直接把請求帶到bootstrap的模塊里,bootstrap抓取請求的url然後再匹配相應的controller,如果沒有規定controller就會被帶到默認的index controller里。controller負責從資料庫獲取數據還有渲染頁面。所有的controller都會先檢查是否登陸,如果沒有登陸的話就去往login頁面讓用戶登陸。

出現不停redirect的現象是因為系統沒法抓取url,所以就一遍一遍地來到index controller,而index controller的功能就是redirect到login,然後系統又沒法抓取url,然後又到index controlle...形成一個完美的循環(???)

又一遍xdebug

又一遍xdebug

。。。

終於被我找到這樣一串代碼

if(isset($_GET[URL])){n $url = filter_input($_GET,URL,FILTER_SANITIZE_URL);n $url = explode(/,$url);n $url = array_filter($url);nn $this->_controlador = strtolower(array_shift($url));n $this->_metodo = strtolower(array_shift($url));n $this->_argumentos = $url;n }n

查閱了php的文檔,發現$_GET[URL]就算是在PHP5.4也取不到url啊!這個程序是怎麼蜜汁跑起來的我也不知道!

果斷改成下面這個樣子:

if(isset($_SERVER[REQUEST_URI])){n $url = filter_input(INPUT_SERVER,REQUEST_URI,FILTER_SANITIZE_URL);n //... ...n }n

登陸頁面終於能正常出現了!淚流滿面!

2.連接資料庫的正確姿勢

【太長不看】mysql_系列function需改成mysqli_系列

輸入用戶名和密碼,沒有一點點防備,bug又出現了:

原來從PHP5.5起,mysql_系列的功能就被棄用了,所有mysql_開頭的function最好都換成mysqli_開頭。但並不是替換一下字母這麼簡單,有的function接受參數的順序也改了,也要注意在代碼中作出相應的改變。

還好全部改完也沒花很長時間,改完後連空氣都清新了呢!

吆西!那麼下一步就是布一個本地mysql資料庫了!

敬請期待下一話

全棧萬事屋

把網站從PHP5.4移到PHP5.6的那些坑——第三話:macOS上運行mysql server, 你選MAMP還是Docker?


推薦閱讀:

PHP黑系列之二:PHP 為什麼函數命名是如此不一致?
想深入學習php面向對象,推薦一些好書唄?
Symfony2 的優缺點有哪些?
2017就這樣過去了...
28歲轉行,決定入坑IT崗位,短期幾個月先學習哪個方向合適?

TAG:PHP | 全栈开发 | MySQL |