不要使用mysql_*系列函數(shù),查詢時盡量對sql語句進行預處理
PHP官方目前已經(jīng)將此系列函數(shù)標記為棄用狀態(tài),添加PHP對mysql的支持,編譯時使用下面的參數(shù)
--enable-mysqlnd --with-pdo-mysql --with-mysqli --with-mysql=mysqlnd
mysql_*系列函數(shù)不支持 預處理語句,事務,存儲過程,異步查詢,多條語句查詢,
這也是強烈建議使用pdo_mysql或者mysqli的原因.
pdo是PHP的數(shù)據(jù)數(shù)據(jù)抽象層,為了擴展升級考慮,最好使用pdo_mysql
使用pdo_mysql擴展,查詢前進行sql語句預處理,不僅能很有效的避免sql注入,同時一個查詢?nèi)绻粓?zhí)行多次,那么只需要給預處理的sql語句重新綁定參數(shù),大大提升查詢的性能,降低資源(cpu)消耗
不要在純PHP文件的最后結(jié)尾中使用閉合標簽good style:
bad style:
在最后一行加上閉合標簽,很可能會由于不小心,在閉合標簽之后加入空白字符,比如換行,示例如下:
//here ,some of whitespace那么假設此文件包含在另外一個文件中,且在上述代碼之后使用header函數(shù)輸出,那么就會報錯,這種錯誤很難被發(fā)現(xiàn)
只有當你在模板文件中才會需要閉合標簽
如下了解一些web安全方面的知識,如sql注入,xss攻擊,csrf攻擊等等,永遠不要相信用戶的輸入知道如何避免上述提到的安全問題
比如使用pdo_msyql預處理語句,防范sql注入
比如對用戶輸入進行過濾,防范xss攻擊等等
始終記著對用戶輸入進行驗證,即使客戶端使用js對用戶數(shù)據(jù)進行驗證了,也不能取代服務器端的驗證,客戶端js驗證是可以繞過的
具體請查看php手冊安全部分內(nèi)容對于用戶輸入的數(shù)據(jù)進行驗證和過濾,不要忘記PHP內(nèi)置的filter_*,盡可能的使用他們了解他們
http://cn2.php.net/manual/en/book.filter.php比如驗證一個郵件地址是否合法
if(!filter_var($emailAddress, FILTER_VALIDATE_EMAIL)) { //Email is invalid. Show the user an error message. }不要編寫重復代碼,保持代碼精簡即針對同一功能或者業(yè)務的代碼,盡可能只有一個實現(xiàn),新手容易犯的錯誤就是喜歡copy,copy是大忌
字節(jié)碼緩存,為PHP開啟apc或者opcode擴展
比較好的做法就是快速完成需求和功能,然后進行重構(gòu),壓縮減少代碼量,重構(gòu)的過程會讓你的代碼更加精簡開啟apc或者opcode對性能的提升很大,你需要做的,僅僅是編譯安裝一個額外的擴展
編碼統(tǒng)一使用utf8
opcode在php-5.5集成到核心代碼中,編譯時 --enable-opcode 即可項目文件統(tǒng)一使用utf8編碼
html頁面meta部分
數(shù)據(jù)庫表使用utf8編碼,鏈接數(shù)據(jù)庫設定編碼
$db = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "root", "");合理使用數(shù)據(jù)庫字段類型,了解一些數(shù)據(jù)庫設計范式合理使用字段類型,不僅能減少磁盤使用量,也能提升查詢性能
其他一些建議不要使用正則去解析html,使用 Document Object Model
使用var_dump而不是echo,因為var_dump輸出的信息更多,調(diào)式的時候很有用
使用緩存,reids,memcache等等
線上環(huán)境關(guān)閉錯誤信息提示###
post提交數(shù)據(jù)處理結(jié)束后,使用header重定向,避免用戶刷新提交垃圾重復數(shù)據(jù)
不要在循環(huán)中執(zhí)行sql語句(假設是必須的,那么也最好在循環(huán)外使用預處理語句)
對密碼進行hash加密,PHP-5.5內(nèi)置hash加密函數(shù) password_hash,可查看手冊
上傳圖片不要存儲在數(shù)據(jù)庫里,上傳圖片時裁剪圖片節(jié)省存儲空間
良好的注釋文檔,保持php代碼風格的一致性(比如縮進一會兒使用tab,一會兒使用space就是特別差的習慣)
良好的代碼code style,請參考 PHP-FIG 標準,PHP-FIG是php框架代碼規(guī)范的非官方組織,有很多框架遵循此編碼規(guī)范盡可能多的使用開源的解決方案,避免重復造輪子,在自己寫代碼完成一個功能前,先去搜索引擎或者技術(shù)網(wǎng)站查找是否已經(jīng)有相關(guān)的解決方案,
避免吹毛求疵,比如到底是使用"還是"號的性能比較好,如果你使用了opcode擴展,兩者之間是沒有什么區(qū)別的,保持風格一致即可
使用版本控制工具維護你的代碼,現(xiàn)在流行的是git
學習一些設計模式,比如單例模式,工廠模式,知道他們的應用場景,知道應用場景比知道他們寫他們更重要
文中如有紕漏,錯誤之處,請指出
對于后續(xù)中列出的其他建議,如果有人覺得需要詳細展開,請留言。
參考或者原文出處:PHP – Best Practises
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/20714.html
平日學習接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動圖演示) 為什么知乎前端圈普遍認為H5游戲和H5展示的JSer 個人整理和封裝的YU.js庫|中文詳細注釋|供新手學習使用 擴展JavaScript語法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
平日學習接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動圖演示) 為什么知乎前端圈普遍認為H5游戲和H5展示的JSer 個人整理和封裝的YU.js庫|中文詳細注釋|供新手學習使用 擴展JavaScript語法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
平日學習接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動圖演示) 為什么知乎前端圈普遍認為H5游戲和H5展示的JSer 個人整理和封裝的YU.js庫|中文詳細注釋|供新手學習使用 擴展JavaScript語法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
平日學習接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動圖演示) 為什么知乎前端圈普遍認為H5游戲和H5展示的JSer 個人整理和封裝的YU.js庫|中文詳細注釋|供新手學習使用 擴展JavaScript語法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
showImg(https://segmentfault.com/img/bV6aHV?w=1280&h=800); 社區(qū)優(yōu)秀文章 Laravel 5.5+passport 放棄 dingo 開發(fā) API 實戰(zhàn),讓 API 開發(fā)更省心 - 自造車輪。 API 文檔神器 Swagger 介紹及在 PHP 項目中使用 - API 文檔撰寫方案 推薦 Laravel API 項目必須使用的 8 個...
閱讀 1991·2021-11-24 09:39
閱讀 986·2021-11-11 16:55
閱讀 1441·2021-10-09 09:43
閱讀 1427·2021-10-08 10:17
閱讀 1661·2021-08-25 09:41
閱讀 431·2019-08-30 13:02
閱讀 634·2019-08-29 15:14
閱讀 1011·2019-08-29 13:53