把網站從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崗位,短期幾個月先學習哪個方向合適?