PHP優化與提升

一。十個不錯的建議
  1.使用 ip2long() 和 long2ip() 函數來把 IP 地址轉化成整型存儲到數據庫里。這種方法把存儲空間降到了接近四分之一(char(15) 的 15 個字節對整形的 4 個字節),計算一個特定的地址是不是在一個區段內頁更簡單了,而且加快了搜索和排序的速度(雖然有時僅僅是快了一點)。
?
  2.在驗證 email 地址的時候使用 checkdnsrr() 函數驗證域名是否存在。這個內置函數能夠確認指定的域名能夠解析成 IP 地址。該函數的PHP 文檔的用戶評論部分有一個簡單的用戶自定義函數,這個函數基于 checkdnsrr(),用來驗證 email 地址的合法性。對于那些認為自己的 email 地址是 “joeuser@wwwphp.net” 而不是 “joeuser@php.net” 的家伙們,這個方法可以很方便的抓住他們。
?
  3.如果你使用的是 PHP 5 和 MySQL 4.1 或者更高的版本,考慮拋棄 mysql_* 系列函數改用改進版的 mysqli_* 系列函數。一個很好的功能就是你可以使用預處理語句,如果你在維護一個數據庫密集型站點,這個功能能夠加快查詢速度。
?
  4.學會愛上三元運算符。
?
  5.如果你在項目中感覺到有可復用的部分,在你寫下一行代碼前先看看 PEAR 中是否已經有了。很多 PHP 程序員都知道 PEAR 是一個很好的資源庫,雖然還有很多程序員不知道。這個在線資源庫包含了超過 400 個可以復用的程序片段,這些程序片段你可以立即用到你的程序里。除非說你的項目真的是非常特別的,你總能找到幫你節省時間的 PEAR 包。(參見 PECL)
?
  6.用 highlight_file() 來自動的打印出格式化的很漂亮的源代碼。如果你在留言板、IRC 這些地方尋求一個腳本的幫助的話,這個函數用起來非常的順手。當然了,要小心不要意外的泄露出你的數據庫連接信息和密碼等。
?
  7.使用 error_reporting(0) 函數來防止用戶看到潛在的敏感錯誤信息。在理想情況下,發布服務器應該在 php.ini 里完全禁止。但是如果你用的是一個共享的 web 服務器的話,你沒有自己的 php.ini 文件,那么這種情況下你最好的選擇就是在所有腳本的第一行前加上 error_reporting(0);(或者使用 require_once() 方法)。這就能夠在出錯的時候完全屏蔽敏感的 SQL 查詢語句和路徑名。
?
  8.在網數據庫中存儲很大的字符串之前使用 gzcompress() 和 gzuncompress() 來顯式的壓縮/解壓字符串。這個 PHP 內置函數使用 gzip 算法,可以壓縮普通文本達 90%。在我每次要讀寫 BLOB 類型的字段的時候都使用這些函數。唯一例外就是當我需要全文檢索的時候。
?
  9.通過“引用”傳遞參數的方法從一個函數中得到多個返回值。就像三元運算符一樣,大部分受過正式編程訓練的程序員都知道這個技巧。但是那些 HTML 背景大于 Pascal 背景的程序員都或多或少的有過這樣的疑問“在僅能使用一次 return 的情況下,從一個函數里返回多個值?”答案就是在變量前加上一個 “&” 符號,通過“引用”傳遞而非“值”傳遞。
?
  10.完全理解“魔術引號”和 SQL 注入的危險性。我希望閱讀到這里的開發者都已經很對 SQL 注入和了解了。不過我還是把這條列在這里,是因為這個確實有點難以理解。如果你還沒有聽說過這種說法,那么把今天剩下的時間都用來 Google、閱讀吧。
二。編程中的思考
1。使用PHP核心函數和類
在準備創建函數之前去查一下PHP手冊吧,也許你想要的函數別人已經構建好了。這些函數和類不僅可以簡化開發效率和流程,更重要的是他們往往有更高的執行效率。
?
  2。創建一個配置文件
散亂的配置通常會讓你手忙腳亂。為了更加容易的組織和連接數據庫,你應該創建一個主要的便于PHP操作的配置文件。配置文件就像一個函數一樣方便使用,而不是在不同的文件進行配置。
?
  3。確保沒有過多的做注釋
大家都知道在編程的時候做注釋是一個好習慣,但并不是注釋越多越好。你沒有必要為每一行代碼做注釋。注釋只是為了用來幫你下次閱讀代碼的時候能夠更好的理解代碼。
?
  4。優秀的源碼編輯器有助節省時間
在Web開發當中,你的大多數時間都是用來編寫代碼。所以說好的源碼編輯器是重要的,好的源碼編輯器不僅僅可以幫你節省時間,還可以提供一些你需要的特性,比如說,語法高亮、代碼補全、調試等等。
?
  5。和其他PHP開發人員建立人際關系網
你不可能永遠都做到完美,讓你不斷提高自己的一個方法就是和其他同行建立關系網。沒什么比學習和分享更加高產。

轉載于:https://www.cnblogs.com/xingxia/p/Synthesis_php.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/251466.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/251466.shtml
英文地址,請注明出處:http://en.pswp.cn/news/251466.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Servlet詳解之兩個init方法的作用

在Servlet中 javax.servlet.GenericServlet類 繼承自java.lang.Object 實現了Serializable,,servlet ,ServletConfig 三個接口 被繼承對象javax.servlet.http.HttpServlet (這是我們常用的一個類) 但仔細看GenericServlet的API&am…

vue --- 使用vue在html上顯示當前時間

希望如下效果(時間按秒鐘更新) 導入Vue依賴的CDN <script src"https://unpkg.com/vue/dist/vue.min.js"> </script>創建視圖 <div id"app">{{date}}</div>Model <script>var app new Vue({el: "app",data: …

namespace 或The content of element type mapper must match EMPTY

必須為元素類型 "mapper" 聲明屬性 "namespace" 或The content of element type "mapper" must match "EMPTY" <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/…

EAS WebService部署

1、創建 facade ,設置好接口及參數、返回信息; 2、代碼&#xff1a;元數據打包部署到服務器; 3、然后修改配置文件&#xff1a; 將本地開發環境生成的.wsdd文件拷貝到eas\server\deploy\eas.ear的web.war下的WEB-INF目錄下&#xff0c;再將.wsdd文件中的<service></se…

vue --- 購物車頁面

下面我看開始自己寫一個購物車的頁面. 我們希望得到如下的效果: 說明: 購買數量最小為0購買數量變化時,對應的總價隨之變化點擊移除操作對應的商品會移除掉,總價隨之改變每個商品作為一個list表的一個對象每個對象,包含id、name、price、count等屬性 index.html (整體代碼最…

Javascript阻止表單提交

Javascript阻止表單提交 Html 1.<form name"loginForm" action"login.aspx" method"post"> 2. <button type"submit" value"Submit" id"submit">Submit</button> 3.</form> Js …

XML CDATA的作用

操作XML文件時&#xff0c;如果允許用戶輸入內容&#xff0c;例如∶"< "、">"、"/"、""等&#xff0c;當生成XML時&#xff0c;會破壞了XML結構&#xff0c;使數據中斷。 這就要用XML CDATA 在XML文檔中的所有文本都會被解析器解…

vue --- 從模塊從父元素獲取數據

vue的精彩之處在于其組件的可復用性.下面談談組件(component)如何從父元素獲取數據 模塊引用 首先說說,如何引用模塊 <div id"app"><my-component ></my-component> </div> <script src“unpkg.com/vue/dist/vue.min.js”> </…

前端知識總結(一)

1、用原生JS實現forEach if(!Array.prototype.forEach) {Array.prototype.forEach function(fn, context) {var context arguments[1];if(typeof fn ! "function") {throw new TypeError(fn "is not a function");}for(var i 0; i < this.length; …

廣播風暴

能夠抑制網絡風暴的是&#xff1f;A中斷器 B集線器 C網橋 D路由器 答案D解析&#xff1a;&#xff08;1&#xff09;廣播風暴&#xff1f;一個數據幀或包被傳輸到本地網段上的每個節點就是廣播&#xff1b;由于網絡拓撲的設計和連接問題&#xff0c;或其他原因導致廣播在網段內…

java getClass()

Java反射學習 所謂反射&#xff0c;可以理解為在運行時期獲取對象類型信息的操作。傳統的編程方法要求程序員在編譯階段決定使用的類型&#xff0c;但是在反射的幫助下&#xff0c;編程人員可以動態獲取這些信息&#xff0c;從而編寫更加具有可移植性的代碼。嚴格地說&#xff…

vue --- 模塊從子組件獲取數據

先看個一般的例子: // 我們需要將信息從子組件傳遞給父組件,(有可能不止一條信息,因此)肯定需要一個標識,這個標識放在$emit里面(js),在dom中通過來關聯父元素。如下:<div id "app"><transfer connect"sayConnect" build"sayBuild"&g…

mySql配置在nodejs中使用

mySql安裝完成后&#xff0c;配置鏈接nodejs項目中的數據庫。 1、測試是否安裝成功。 2、use nodejs使用nodejs 3、設置數據源 5、exit 轉載于:https://www.cnblogs.com/zhxzh/p/9244996.html

轉,jquery中attr和prop的區別

https://www.cnblogs.com/Showshare/p/different-between-attr-and-prop.html 像checkbox&#xff0c;radio和select這樣的元素&#xff0c;選中屬性對應“checked”和“selected”&#xff0c;這些也屬于固有屬性&#xff0c;因此需要使用prop方法去操作才能獲得正確的結果。 …

前端知識總結(二)

33、閉包 閉包的概念 上一節代碼中的f2函數&#xff0c;就是閉包。 各種專業文獻上的"閉包"&#xff08;closure&#xff09;定義非常抽象&#xff0c;很難看懂。我的理解是&#xff0c;閉包就是能夠讀取其他函數內部變量的函數。 由于在Javascript語言中&#x…

javascript --- 實現Ajax的代碼

直接上代碼,(前幾天項目出差部署去叻) const ajax function (options {}) {option.type (options.type || GET).toUpperCase();let data [];for(let i in options.data) {data.push(encodeURIComponent(i) encodeURIComponent (options.data[i]));}data data.join(&am…

[Spark]-RDD詳解之變量操作

RDD的操作 1.1 概述 RDD整體包含兩大類操作 transformation 從現有中創建一個新的數據集 action 在對數據集做一定程度的計算后將結果返回 對于所有的transformation,都是Lazy的,也就是說它不會立即執行,只是單純的記住怎么樣從原來的數據集進行轉換的邏輯而已,它僅在某一個計算…

前端知識總結(三)

51、啟動GNU加速 硬件加速的工作原理 瀏覽器接收到一個頁面之后&#xff0c;將html解析成DOM樹&#xff0c;瀏覽器解析渲染「html」的過程 按著一定的規則執行&#xff0c;DOM樹和CSS樹結合后構成瀏覽器形成頁面的 渲染樹 ; 渲染樹中包含大量的渲染元素&#xff0c;每一個元素…

為阿里云服務器ECS實例安裝Nodejs

為阿里云服務器ECS實例安裝Nodejs部署Node.js項目&#xff08;CentOS&#xff09;準備工作操作步驟步驟1&#xff1a;部署Node.js環境&#xff08;使用二進制文件安裝&#xff09;步驟2&#xff1a;部署測試項目部署Node.js項目&#xff08;CentOS&#xff09; 本文檔介紹如何…

JavaScrpt --- es5實現ES6的Number擴展(部分)

ES6對數值對象Number進行了擴展, // ES實現Number.isFinite() (function (global) {var global_isFinite global.isFinite;Object.defineProperty(Number, isFinite, {value: function isFinite(value) {return typeof value number && global_isFinite(value);},co…