php-面試第二篇

11帘腹、談?wù)刴vc的認(rèn)識(shí)寒跳。由模型、視圖竹椒、控制器完成的應(yīng)用程序童太,由模型發(fā)出要實(shí)現(xiàn)的功能到控制器,控制器接收組織功能傳遞給視圖12、說(shuō)明php中傳值與傳引用的區(qū)別书释,并說(shuō)明傳值什么時(shí)候傳引用翘贮?變量默認(rèn)總是傳值賦值,那也就是說(shuō)爆惧,當(dāng)將一個(gè)表達(dá)式的值賦予一個(gè)變量時(shí)狸页,整個(gè)表達(dá)式的值被賦值到目標(biāo)變量,這意味著:當(dāng)一個(gè)變量的賦予另外一個(gè)變量時(shí)扯再,改變其中一個(gè)變量的值芍耘,將不會(huì)影響到另外一個(gè)變量php也提供了另外一種方式給變量賦值:引用賦值。這意味著新的變量簡(jiǎn)單的__引用__(換言之熄阻,成為了其別名或者指向)了原始變量斋竞。改動(dòng)的新的變量將影響到原始變量,反之亦然秃殉。使用引用賦值坝初,簡(jiǎn)單地將一個(gè)&符號(hào)加到將要賦值的變量前(源變量)對(duì)象默認(rèn)是傳引用 對(duì)于較大是的數(shù)據(jù),傳引用比較好钾军,這樣可以節(jié)省內(nèi)存的開(kāi)銷(xiāo)13鳄袍、isset、empty吏恭、is_null的區(qū)別拗小。isset 判斷變量是否定義或者是否為空 變量存在返回ture,否則返回false 變量定義不賦值返回false unset一個(gè)變量樱哼,返回false 變量賦值為null十籍,返回false empty:判斷變量的值是否為空,能轉(zhuǎn)換為false的都是空唇礁,為空返回true,反之返回false惨篱。 "",0,"0",NULL盏筐,F(xiàn)ALSE都認(rèn)為為空,返回true 沒(méi)有任何屬性的對(duì)象都認(rèn)為是空 is_null:檢測(cè)傳入的值(值砸讳、變量琢融、表達(dá)式)是否為null 定義了,但是賦值為Null 定義了簿寂,但是沒(méi)有賦值 unset一個(gè)變量14漾抬、PHP網(wǎng)站的主要攻擊方式有哪些? 1. 命令注入(Command Injection) 2. eval 注入(Eval Injection) 3. 客戶(hù)端腳本攻擊(Script Insertion) 4. 跨網(wǎng)站腳本攻擊(Cross Site Scripting, XSS) 5. SQL 注入攻擊(SQL injection) 6. 跨網(wǎng)站請(qǐng)求偽造攻擊(Cross Site RequestForgeries, CSRF) 7. Session 會(huì)話(huà)劫持(Session Hijacking) 8. Session 固定攻擊(Session Fixation) 9. HTTP 響應(yīng)拆分攻擊(HTTP Response Splitting) 10. 文件上傳漏洞(File Upload Attack) 11. 目錄穿越漏洞(Directory Traversal) 12. 遠(yuǎn)程文件包含攻擊(Remote Inclusion) 13. 動(dòng)態(tài)函數(shù)注入攻擊(Dynamic VariableEvaluation) 14. URL 攻擊(URL attack) 15. 表單提交欺騙攻擊(Spoofed FormSubmissions) 16. HTTP 請(qǐng)求欺騙攻擊(Spoofed HTTP Requests)15常遂、框架中什么是單一入口和多入口 纳令, 單一入口的優(yōu)缺點(diǎn)? 1. 多口就是通過(guò)訪(fǎng)問(wèn)不同的文件來(lái)完成用戶(hù)請(qǐng)求。單一入口只 web 程序所有的請(qǐng)求都指向一個(gè)腳本文件的平绩。 2. 單一入口更容易控制權(quán)限圈匆,方便對(duì) http 請(qǐng)求可以進(jìn)行安全性檢查。缺點(diǎn):URL 看起來(lái)不那么美觀(guān)捏雌,特別是對(duì)搜索引擎來(lái)說(shuō)不友好跃赚。16、什么是面向?qū)ο笮允恐饕卣魇鞘裁次嘲粒棵嫦驅(qū)ο笫浅绦虻囊环N設(shè)計(jì)模式,它利于提高程序的重用性肤频,使程序機(jī)構(gòu)更加清晰叹括。 主要特征是:封裝、繼承着裹、多態(tài)领猾。五大基本原則: 單一職責(zé)原則;開(kāi)放封閉原則骇扇;替換原則摔竿; 依賴(lài)原則; 接口分離原則少孝。17继低、面向?qū)ο笥心膸追N常用的設(shè)計(jì)模式,六大設(shè)計(jì)原則是什么?常用設(shè)計(jì)模式:?jiǎn)卫J?有的叫單元素模式,單態(tài)模式)稍走,工廠(chǎng)模式袁翁,觀(guān)察者模式,命令鏈模式,策略模式婿脸。1),OCP原則(也叫開(kāi)閉原則) 2),SRP原則(職責(zé)單一原則) 3),OCP原則(里氏替換原則) 4),DIP原則(依賴(lài)倒置原則) 6),LoD法則(迪米特法則)18粱胜、了解XSS攻擊嗎?如何防止狐树?XSS是跨站腳本攻擊焙压,首先是利用跨站腳本漏洞以一個(gè)特權(quán)模式去執(zhí)行攻擊者構(gòu)造的腳本,然后利用不安全的Activex控件執(zhí)行惡意的行為抑钟。使用htmlspecialchars()函數(shù)對(duì)提交的內(nèi)容進(jìn)行過(guò)濾涯曲,使字符串里面的特殊符號(hào)實(shí)體化。19在塔、SQL注入漏洞產(chǎn)生的原因幻件?如何防止?SQL注入產(chǎn)生的原因:程序開(kāi)發(fā)過(guò)程中不注意規(guī)范書(shū)寫(xiě)sql語(yǔ)句和對(duì)特殊字符進(jìn)行過(guò)濾蛔溃,導(dǎo)致客戶(hù)端可以通過(guò)全局變量POST和GET提交一些sql語(yǔ)句正常執(zhí)行绰沥。防止SQL注入的方式: 1. 開(kāi)啟配置文件中的magic_quotes_gpc 和 magic_quotes_runtime設(shè)置 2. 執(zhí)行sql語(yǔ)句時(shí)使用addslashes進(jìn)行sql語(yǔ)句轉(zhuǎn)換 3. Sql語(yǔ)句書(shū)寫(xiě)盡量不要省略雙引號(hào)和單引號(hào)篱蝇。 4. 過(guò)濾掉sql語(yǔ)句中的一些關(guān)鍵詞:update、insert揪利、delete态兴、select、 * 疟位。 5. 提高數(shù)據(jù)庫(kù)表和字段的命名技巧埋嵌,對(duì)一些重要的字段根據(jù)程序的特點(diǎn)命名瞬场,取不易被猜到的。 6. Php配置文件中設(shè)置register_globals為off,關(guān)閉全局變量注冊(cè) 7. 控制錯(cuò)誤信息,不要在瀏覽器上輸出錯(cuò)誤信息露戒,將錯(cuò)誤信息寫(xiě)到日志文件中拣展。20左电、對(duì)于大流量網(wǎng)站柿扣,采用什么方法來(lái)解決訪(fǎng)問(wèn)量的問(wèn)題。 ● 確認(rèn)服務(wù)器硬件是否能夠支持當(dāng)前的流量 ● 數(shù)據(jù)庫(kù)讀寫(xiě)分離祥绞,優(yōu)化數(shù)據(jù)表 ● 程序功能規(guī)則非洲,禁止外部的盜鏈 ● 控制大文件的下載 ● 使用不同主機(jī)分流主要流量 21、什么是靜態(tài)路由蜕径,其特點(diǎn)是什么?什么是動(dòng)態(tài)路由两踏,其特點(diǎn)是什么?  靜態(tài)路由是由系統(tǒng)管理員設(shè)計(jì)與構(gòu)建的路由表規(guī)定的路由。適用于網(wǎng)關(guān)數(shù)量有限的場(chǎng)合兜喻,且網(wǎng)絡(luò)拓樸結(jié)構(gòu)不經(jīng)常變化的網(wǎng)絡(luò)梦染。其缺點(diǎn)是不能動(dòng)態(tài)地適用網(wǎng)絡(luò)狀況的變化,當(dāng)網(wǎng)絡(luò)狀況變化后必須由網(wǎng)絡(luò)管理員修改路由表朴皆。動(dòng)態(tài)路由是由路由選擇協(xié)議而動(dòng)態(tài)構(gòu)建的帕识,路由協(xié)議之間通過(guò)交換各自所擁有的路由信息實(shí)時(shí)更新路由表的內(nèi)容。動(dòng)態(tài)路由可以自動(dòng)學(xué)習(xí)網(wǎng)絡(luò)的拓樸結(jié)構(gòu)遂铡,并更新路由表肮疗。其缺點(diǎn)是路由廣播更新信息將占據(jù)大量的網(wǎng)絡(luò)帶寬。22扒接、PHP的垃圾收集機(jī)制是怎樣的伪货?PHP可以自動(dòng)進(jìn)行內(nèi)存管理,清除不再需要的對(duì)象珠增。PHP使用了引用計(jì)數(shù)(reference counting)這種單純的垃圾回收(garbage collection)機(jī)制。每個(gè)對(duì)象都內(nèi)含一個(gè)引用計(jì)數(shù)器砍艾,每個(gè)reference連接到對(duì)象蒂教,計(jì)數(shù)器加1。當(dāng)reference離開(kāi)生存空間或被設(shè)為NULL脆荷,計(jì)數(shù)器減1凝垛。當(dāng)某個(gè)對(duì)象的引用計(jì)數(shù)器為零時(shí)懊悯,PHP知道你將不再需要使用這個(gè)對(duì)象,釋放其所占的內(nèi)存空間梦皮。23炭分、PHP如何實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)(寫(xiě)出三種方法)。方法一:php函數(shù)跳轉(zhuǎn)剑肯,缺點(diǎn)捧毛,header頭之前不能有輸出,跳轉(zhuǎn)后的程序繼續(xù)執(zhí)行让网,可用exit中斷執(zhí)行后面的程序呀忧。header("Location:網(wǎng)址");//直接跳轉(zhuǎn)header("refresh:3;url=http://axgle.za.net");//三秒后跳轉(zhuǎn) 方法二:利用metaecho"";方法三: echo "window.location.href=''";24、請(qǐng)對(duì)POSIX風(fēng)格和兼容Perl風(fēng)格兩種正則表達(dá)式的主要函數(shù)進(jìn)行類(lèi)比說(shuō)明溃睹。1)preg_replace()里面的正則可以寫(xiě)成型如:"/.xxx/"而ereg_replace()里面的正則需寫(xiě)成型如"xxx"2)preg_replace()能操作數(shù)組而账,而ereg_replace()不可以3)在逆向引用用preg_replace()可使用0-99個(gè),而ereg_replace()最多為9個(gè)使用Perl兼容正則表達(dá)式語(yǔ)法的preg_match()函數(shù)通常是比ereg()更快的替代方案因篇。25泞辐、請(qǐng)寫(xiě)出并說(shuō)明如何在命令行下運(yùn)行PHP腳本(寫(xiě)出兩種方式)同時(shí)向PHP腳本傳遞參數(shù)?首先進(jìn)入php安裝目錄Php –f d:/wamp/www/1.php其中-f參數(shù)指定要執(zhí)行的php文件php –r phpinfo();其中-r表示直接執(zhí)行php代碼竞滓,無(wú)需寫(xiě)開(kāi)始結(jié)束標(biāo)記26咐吼、一個(gè)函數(shù)的參數(shù)不能是對(duì)變量的引用,除非在php.ini中把____設(shè)為on虽界。allow_call_time_pass_reference是否啟用在函數(shù)調(diào)用時(shí)強(qiáng)制參數(shù)被按照引用傳遞27汽烦、PHP中如何判斷一個(gè)字符串是否是合法的日期模式:2007-03-13 13:13:13。思路:先把給定字符串用日期函數(shù)重新轉(zhuǎn)換并比較莉御。?php function checkDateTime($data){ if (date('Y-m-d H:i:s',strtotime($data)) == $data) { return true; } else { return false; } } // 示例 $data = '2015-06-20 13:35:42'; var_dump(checkDateTime($data));//bool(true) $data = '2015-06-36 13:35:42'; var_dump(checkDateTime($data));//bool(false)?28撇吞、寫(xiě)出五種以上你使用過(guò)的PHP的擴(kuò)展的名稱(chēng)mysql,mysqli,iconv,mbstring,gd,redis,memcache29、php中WEB上傳文件的原理是什么礁叔,如何限制上傳文件的大须咕薄?上傳文件的表單使用post方式琅关,并且要在form中添加enctype='multipart/form-data'煮岁。一般可以加上隱藏域:,位置在file域前面涣易。value的值是上傳文件的客戶(hù)端字節(jié)限制画机。可以避免用戶(hù)在花時(shí)間等待上傳大文件之后才發(fā)現(xiàn)文件過(guò)大上傳失敗的麻煩新症。使用file文件域來(lái)選擇要上傳的文件步氏,當(dāng)點(diǎn)擊提交按鈕之后,文件會(huì)被上傳到服務(wù)器中的臨時(shí)目錄徒爹,在腳本運(yùn)行結(jié)束時(shí)會(huì)被銷(xiāo)毀荚醒,所以應(yīng)該在腳本結(jié)束之前芋类,將其移動(dòng)到服務(wù)器上的某個(gè)目錄下,可以通過(guò)函數(shù)move_uploaded_file()來(lái)移動(dòng)臨時(shí)文件界阁,要獲取臨時(shí)文件的信息侯繁,使用$_FILES。限制上傳文件大小的因素有:1)客戶(hù)端的隱藏域MAX_FILE_SIZE的數(shù)值(可以被繞開(kāi))泡躯。2)服務(wù)器端的upload_max_filesize贮竟,post_max_size和memory_limit。這幾項(xiàng)不能夠用腳本來(lái)設(shè)置精续。3)自定義文件大小限制邏輯坝锰。即使服務(wù)器的限制是能自己決定,也會(huì)有需要個(gè)別考慮的情況重付。所以這個(gè)限制方式經(jīng)常是必要的顷级。30、在url中用get傳值的時(shí)候确垫,若中文出現(xiàn)亂碼弓颈,應(yīng)該用哪個(gè)函數(shù)對(duì)中文進(jìn)行編碼?urlencode31删掀、如果我的網(wǎng)站用的utf-8編碼翔冀,為防止亂碼出現(xiàn),都需要注意哪些地方披泪?1)數(shù)據(jù)庫(kù)中庫(kù)和表都用utf8編碼2)php連接mysql纤子,指定數(shù)據(jù)庫(kù)編碼為utf8 mysql_query(“set names utf8”);3)php文件指定頭部編碼為utf-8 header(“content-type:text/html;charset=utf-8”);4)網(wǎng)站下所有文件的編碼為utf85)html文件指定編碼為utf-832、編寫(xiě)函數(shù)取得上一月的最后一天Date(‘Y-m-d’,strtotime(‘-‘.date(‘d’).’ day’));33款票、(^\s*)|(\s*$)這個(gè)正則表達(dá)式作用是:__________控硼;匹配以0個(gè)或多個(gè)空白符開(kāi)頭或者0個(gè)或多個(gè)空白符結(jié)尾的字符串34.寫(xiě)出php的public、protected艾少、private幾種訪(fǎng)問(wèn)控制模式的區(qū)別public:公有卡乾,任何地方都可以訪(fǎng)問(wèn)protected:繼承,只能在本類(lèi)或子類(lèi)中訪(fǎng)問(wèn)缚够,在其它地方不允許訪(fǎng)問(wèn)private:私有幔妨,只能在本類(lèi)中訪(fǎng)問(wèn),在其他地方不允許訪(fǎng)問(wèn)35.autoload()函數(shù)是如何運(yùn)作的谍椅?使用這個(gè)魔術(shù)函數(shù)的基本條件是類(lèi)文件的文件名要和類(lèi)的名字保持一致误堡。當(dāng)程序執(zhí)行到實(shí)例化某個(gè)類(lèi)的時(shí)候,如果在實(shí)例化前沒(méi)有引入這個(gè)類(lèi)文件雏吭,那么就自動(dòng)執(zhí)行__autoload()函數(shù)锁施。這個(gè)函數(shù)會(huì)根據(jù)實(shí)例化的類(lèi)的名稱(chēng)來(lái)查找這個(gè)類(lèi)文件的路徑,當(dāng)判斷這個(gè)類(lèi)文件路徑下確實(shí)存在這個(gè)類(lèi)文件后就執(zhí)行include或者require來(lái)載入該類(lèi)思恐,然后程序繼續(xù)執(zhí)行沾谜,如果這個(gè)路徑下不存在該文件時(shí)就提示錯(cuò)誤。36.類(lèi)的屬性可以序列化后保存到session中胀莹,從而以后可以恢復(fù)整個(gè)類(lèi)基跑,這要用到的函數(shù)是____serialize()和unserialize()37.接口和抽象類(lèi)的區(qū)別是什么?抽象類(lèi)是一種不能被實(shí)例化的類(lèi)描焰,只能作為其他類(lèi)的父類(lèi)來(lái)使用媳否。抽象類(lèi)是通過(guò)關(guān)鍵字abstract來(lái)聲明的。抽象類(lèi)與普通類(lèi)相似荆秦,都包含成員變量和成員方法篱竭,兩者的區(qū)別在于,抽象類(lèi)中至少要包含一個(gè)抽象方法步绸,抽象方法沒(méi)有方法體掺逼,該方法天生就是要被子類(lèi)重寫(xiě)的。抽象方法的格式為:Abstract function abstract Method();接口是通過(guò)interface關(guān)鍵字來(lái)聲明的瓤介,接口中的成員常量和方法都是public的吕喘,方法可以不寫(xiě)關(guān)鍵字public,接口中的方法也是沒(méi)有方法體刑桑。接口中的方法也天生就是要被子類(lèi)實(shí)現(xiàn)的氯质。抽象類(lèi)和接口實(shí)現(xiàn)的功能十分相似,最大的不同是接口能實(shí)現(xiàn)多繼承祠斧。在應(yīng)用中選擇抽象類(lèi)還是接口要看具體實(shí)現(xiàn)闻察。子類(lèi)繼承抽象類(lèi)使用extends,子類(lèi)實(shí)現(xiàn)接口使用implements琢锋。抽象類(lèi)是對(duì)事物本質(zhì)的抽象辕漂,接口是對(duì)動(dòng)作的抽象。38吩蔑、類(lèi)中如何定義常量钮热、如何在類(lèi)中和類(lèi)外調(diào)用常量?類(lèi)中的常量也就是成員常量烛芬,常量就是不會(huì)改變的量隧期,是一個(gè)恒值。定義常量使用關(guān)鍵字const赘娄,例如:const PI=3.1415326;無(wú)論是類(lèi)內(nèi)還是類(lèi)外仆潮,常量的訪(fǎng)問(wèn)和變量是不一樣的,常量不需要實(shí)例化對(duì)象遣臼,訪(fǎng)問(wèn)常量的格式都是類(lèi)名加作用域操作符號(hào)(雙冒號(hào))來(lái)調(diào)用性置,即:類(lèi)名::類(lèi)常量名。39揍堰、cookie和session原理及區(qū)別 鹏浅。cookie采用的是客戶(hù)端的會(huì)話(huà)狀態(tài)的一種儲(chǔ)存機(jī)制嗅义。它是服務(wù)器在本地機(jī)器上存儲(chǔ)的小段文本或者是內(nèi)存中的一段數(shù)據(jù),并隨每一個(gè)請(qǐng)求發(fā)送至同一個(gè)服務(wù)器隐砸。session是一種服務(wù)器端的信息管理機(jī)制之碗,它把這些文件信息以文件的形式存放在服務(wù)器的硬盤(pán)空間上(這是默認(rèn)情況,可以用memcache把這種數(shù)據(jù)放到內(nèi)存里面)當(dāng)客戶(hù)端向服務(wù)器發(fā)出請(qǐng)求時(shí)季希,要求服務(wù)器端產(chǎn)生一個(gè)session時(shí)褪那,服務(wù)器端會(huì)先檢查一下,客戶(hù)端的cookie里面有沒(méi)有session_id式塌,是否過(guò)期博敬。如果有這樣的session_id的話(huà),服務(wù)器端會(huì)根據(jù)cookie里的session_id把服務(wù)器的session檢索出來(lái)峰尝。如果沒(méi)有這樣的session_id的話(huà)偏窝,服務(wù)器端會(huì)重新建立一個(gè)。PHPSESSID是一串加了密的字符串武学,它的生成按照一定的規(guī)則來(lái)執(zhí)行囚枪。同一客戶(hù)端啟動(dòng)二次session_start的話(huà),session_id是不一樣的劳淆。 區(qū)別:Cookie保存在客戶(hù)端瀏覽器中链沼,而Session保存在服務(wù)器上。 Cookie機(jī)制是通過(guò)檢查客戶(hù)身上的“通行證”來(lái)確定客戶(hù)身份的話(huà)沛鸵,那么Session機(jī)制就是通過(guò)檢查服務(wù)器上的“客戶(hù)明細(xì)表”來(lái)確認(rèn)客戶(hù)身份括勺。 Session相當(dāng)于程序在服務(wù)器上建立的一份客戶(hù)檔案,客戶(hù)來(lái)訪(fǎng)的時(shí)候只需要查詢(xún)客戶(hù)檔案表就可以了曲掰。40疾捍、session產(chǎn)生的session_id放在cookie里面,如果用戶(hù)把cookie禁止掉栏妖,是不是session也不能用了呢乱豆?禁止掉cookie后,session當(dāng)然可以用吊趾,不過(guò)通過(guò)其他的方式來(lái)獲得這個(gè)sessionid宛裕,比如,可以根在url的后面论泛,或者以表單的形勢(shì)提交到服務(wù)器端揩尸。從而使服務(wù)器端了解客戶(hù)端的狀態(tài)。41屁奏、為什么說(shuō)session 比cookie更安全岩榆?真正的cookie存在于客戶(hù)端硬盤(pán)上的一個(gè)文本文件,如果兩者一樣的話(huà),只要cookie就好了勇边,讓客戶(hù)端來(lái)分提服務(wù)器的負(fù)擔(dān)犹撒,并且對(duì)于用戶(hù)來(lái)說(shuō)又是透明的。但實(shí)際上不是粒褒。session的sessionID是放在cookie里油航,要想功破session的話(huà),得分兩步:第一要功破cookie怀浆。功破cookie后,你要得到sessionID,sessionID是要有人登錄怕享,或者啟動(dòng)session_start才會(huì)有执赡,你不知道什么時(shí)候會(huì)有人登錄。第二取有效sessionID函筋。sessionID是加密的沙合,第二次session_start的時(shí)候,前一次的sessionID就沒(méi)有用了跌帐,session過(guò)期時(shí)sessionid也會(huì)失效首懈,想在短時(shí)間內(nèi)功破加了密的 sessionID很難。session是針對(duì)某一次通信而言谨敛,會(huì)話(huà)結(jié)束session也就隨著消失了究履。40、寫(xiě)出郵箱地址正則匹配表達(dá)式(注意要匹配所有郵箱域名)脸狸。^[a-z0-9_-]+[a-z0-9_.-]*@[a-z0-9_-]+[a-z0-9_.-]*\.[a-z]{2,5}$41最仑、如何提高PHP運(yùn)行效率?1)、如果能將類(lèi)的方法定義成static炊甲,就盡量定義成static泥彤,它的速度會(huì)提升將近4倍。2)卿啡、$row[’id’] 的速度是$row[id]的7倍吟吝。3)、echo 比 print 快颈娜,并且使用echo的多重參數(shù)(譯注:指用逗號(hào)而不是句點(diǎn))代替字符串連接剑逃,比如echo $str1,$str2。4)官辽、在執(zhí)行for循環(huán)之前確定最大循環(huán)數(shù)炕贵,不要每循環(huán)一次都計(jì)算最大值,最好運(yùn)用foreach代替野崇。5)称开、注銷(xiāo)那些不用的變量尤其是大數(shù)組,以便釋放內(nèi)存。6)鳖轰、盡量避免使用__get清酥,__set,__autoload蕴侣。7)焰轻、require_once()代價(jià)昂貴。8)昆雀、include文件時(shí)盡量使用絕對(duì)路徑辱志,因?yàn)樗苊饬薖HP去include_path里查找文件的速度,解析操作系統(tǒng)路徑所需的時(shí)間會(huì)更少狞膘。9)揩懒、如果你想知道腳本開(kāi)始執(zhí)行(譯注:即服務(wù)器端收到客戶(hù)端請(qǐng)求)的時(shí)刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()挽封。10)已球、函數(shù)代替正則表達(dá)式完成相同功能。11)辅愿、str_replace函數(shù)比preg_replace函數(shù)快智亮,但strtr函數(shù)的效率是str_replace函數(shù)的四倍。12)点待、如果一個(gè)字符串替換函數(shù)阔蛉,可接受數(shù)組或字符作為參數(shù),并且參數(shù)長(zhǎng)度不太長(zhǎng)癞埠,那么可以考慮額外寫(xiě)一段替換代碼馍忽,使得每次傳遞參數(shù)是一個(gè)字符,而不是只寫(xiě)一行代碼接受數(shù)組作為查詢(xún)和替換的參數(shù)燕差。13)遭笋、使用選擇分支語(yǔ)句(譯注:即switch case)好于使用多個(gè)if,else if語(yǔ)句徒探。14)瓦呼、用@屏蔽錯(cuò)誤消息的做法非常低效,極其低效测暗。15)央串、打開(kāi)apache的mod_deflate模塊,可以提高網(wǎng)頁(yè)的瀏覽速度碗啄。16)质和、數(shù)據(jù)庫(kù)連接當(dāng)使用完畢時(shí)應(yīng)關(guān)掉,不要用長(zhǎng)連接稚字。17)饲宿、錯(cuò)誤消息代價(jià)昂貴厦酬。18)、在方法中遞增局部變量瘫想,速度是最快的仗阅。幾乎與在函數(shù)中調(diào)用局部變量的速度相當(dāng)。19)国夜、遞增一個(gè)全局變量要比遞增一個(gè)局部變量慢2倍减噪。20)、遞增一個(gè)對(duì)象屬性(如:$this->prop++)要比遞增一個(gè)局部變量慢3倍车吹。21)筹裕、遞增一個(gè)未預(yù)定義的局部變量要比遞增一個(gè)預(yù)定義的局部變量慢9至10倍。22)窄驹、僅定義一個(gè)局部變量而沒(méi)在函數(shù)中調(diào)用它朝卒,同樣會(huì)減慢速度(其程度相當(dāng)于遞增一個(gè)局部變量)。PHP大概會(huì)檢查看是否存在全局變量馒吴。23)、方法調(diào)用看來(lái)與類(lèi)中定義的方法的數(shù)量無(wú)關(guān)瑟曲,因?yàn)槲遥ㄔ跍y(cè)試方法之前和之后都)添加了10個(gè)方法饮戳,但性能上沒(méi)有變化。24)洞拨、派生類(lèi)中的方法運(yùn)行起來(lái)要快于在基類(lèi)中定義的同樣的方法扯罐。25)、調(diào)用帶有一個(gè)參數(shù)的空函數(shù)烦衣,其花費(fèi)的時(shí)間相當(dāng)于執(zhí)行7至8次的局部變量遞增操作歹河。類(lèi)似的方法調(diào)用所花費(fèi)的時(shí)間接近于15次的局部變量遞增操作。26)花吟、Apache解析一個(gè)PHP腳本的時(shí)間要比解析一個(gè)靜態(tài)HTML頁(yè)面慢2至10倍秸歧。盡量多用靜態(tài)HTML頁(yè)面,少用腳本衅澈。27)键菱、除非腳本可以緩存,否則每次調(diào)用時(shí)都會(huì)重新編譯一次今布。引入一套PHP緩存機(jī)制通尘福可以提升25%至100%的性能,以免除編譯開(kāi)銷(xiāo)部默。28)侵蒙、盡量做緩存,可使用memcached傅蹂。memcached是一款高性能的內(nèi)存對(duì)象緩存系統(tǒng)纷闺,可用來(lái)加速動(dòng)態(tài)Web應(yīng)用程序算凿,減輕數(shù)據(jù)庫(kù)負(fù)載。對(duì)運(yùn)算碼 (OP code)的緩存很有用急但,使得腳本不必為每個(gè)請(qǐng)求做重新編譯澎媒。29)、當(dāng)操作字符串并需要檢驗(yàn)其長(zhǎng)度是否滿(mǎn)足某種要求時(shí)波桩,你想當(dāng)然地會(huì)使用strlen()函數(shù)戒努。此函數(shù)執(zhí)行起來(lái)相當(dāng)快,因?yàn)樗蛔鋈魏斡?jì)算镐躲,只返回在zval 結(jié)構(gòu)(C的內(nèi)置數(shù)據(jù)結(jié)構(gòu)储玫,用于存儲(chǔ)PHP變量)中存儲(chǔ)的已知字符串長(zhǎng)度。但是萤皂,由于strlen()是函數(shù)撒穷,多多少少會(huì)有些慢,因?yàn)楹瘮?shù)調(diào)用會(huì)經(jīng)過(guò)諸多步驟裆熙,如字母小寫(xiě)化(譯注:指函數(shù)名小寫(xiě)化端礼,PHP不區(qū)分函數(shù)名大小寫(xiě)))、哈希查找入录,會(huì)跟隨被調(diào)用的函數(shù)一起執(zhí)行蛤奥。在某些情況下,你可以使用isset() 技巧加速執(zhí)行你的代碼僚稿。(舉例如下) 2. if (strlen($foo) < 5) { echo “Foo is too short”$$ }復(fù)制代碼(與下面的技巧做比較) 2. if (!isset($foo{5})) { echo “Foo is too short”$$ }復(fù)制代碼調(diào)用isset()恰巧比strlen()快凡桥,因?yàn)榕c后者不同的是,isset()作為一種語(yǔ)言結(jié)構(gòu)蚀同,意味著它的執(zhí)行不需要函數(shù)查找和字母小寫(xiě)化缅刽。也就是說(shuō),實(shí)際上在檢驗(yàn)字符串長(zhǎng)度的頂層代碼中你沒(méi)有花太多開(kāi)銷(xiāo)蠢络。30)衰猛、當(dāng)執(zhí)行變量$i的遞增或遞減時(shí),$i++會(huì)比++$i慢一些刹孔。這種差異是PHP特有的腕侄,并不適用于其他語(yǔ)言,所以請(qǐng)不要修改你的C或Java代碼并指望它們能立即變快芦疏,沒(méi)用的冕杠。++$i更快是因?yàn)樗恍枰?條指令(opcodes),$i++則需要4條指令酸茴。后置遞增實(shí)際上會(huì)產(chǎn)生一個(gè)臨時(shí)變量分预,這個(gè)臨時(shí)變量隨后被遞增。而前置遞增直接在原值上遞增薪捍。這是最優(yōu)化處理的一種笼痹,正如Zend的PHP優(yōu)化器所作的那樣配喳。牢記這個(gè)優(yōu)化處理不失為一個(gè)好主意,因?yàn)椴⒉皇撬械闹噶顑?yōu)化器都會(huì)做同樣的優(yōu)化處理凳干,并且存在大量沒(méi)有裝配指令優(yōu)化器的互聯(lián)網(wǎng)服務(wù)提供商(ISPs)和服務(wù)器晴裹。31)、并不是事必面向?qū)ο?OOP)救赐,面向?qū)ο笸_(kāi)銷(xiāo)很大涧团,每個(gè)方法和對(duì)象調(diào)用都會(huì)消耗很多內(nèi)存。32)经磅、并非要用類(lèi)實(shí)現(xiàn)所有的數(shù)據(jù)結(jié)構(gòu)泌绣,數(shù)組也很有用。33)预厌、不要把方法細(xì)分得過(guò)多阿迈,仔細(xì)想想你真正打算重用的是哪些代碼?34)轧叽、當(dāng)你需要時(shí)苗沧,你總能把代碼分解成方法。35)炭晒、盡量采用大量的PHP內(nèi)置函數(shù)待逞。36)、如果在代碼中存在大量耗時(shí)的函數(shù)腰埂,你可以考慮用C擴(kuò)展的方式實(shí)現(xiàn)它們飒焦。37)蜈膨、評(píng)估檢驗(yàn)(profile)你的代碼屿笼。檢驗(yàn)器會(huì)告訴你,代碼的哪些部分消耗了多少時(shí)間翁巍。Xdebug調(diào)試器包含了檢驗(yàn)程序驴一,評(píng)估檢驗(yàn)總體上可以顯示出代碼的瓶頸。38)灶壶、mod_zip可作為Apache模塊肝断,用來(lái)即時(shí)壓縮你的數(shù)據(jù),并可讓數(shù)據(jù)傳輸量降低80%驰凛。39)胸懈、在可以用file_get_contents替代file、fopen恰响、feof趣钱、fgets等系列方法的情況下,盡量用file_get_contents胚宦,因?yàn)樗男矢叩枚嗍子校〉且⒁鈌ile_get_contents在打開(kāi)一個(gè)URL文件時(shí)候的PHP版本問(wèn)題燕垃;40)、盡量的少進(jìn)行文件操作井联,雖然PHP的文件操作效率也不低的卜壕;41)、優(yōu)化Select SQL語(yǔ)句烙常,在可能的情況下盡量少的進(jìn)行Insert轴捎、Update操作;42)、循環(huán)內(nèi)部不要聲明變量军掂,尤其是大變量:對(duì)象43)轮蜕、多維數(shù)組盡量不要循環(huán)嵌套賦值;44)蝗锥、用單引號(hào)替代雙引號(hào)引用字符串跃洛;45)、“用i += 1代替 i = i+1终议。符合c/c++的習(xí)慣汇竭,效率還高”;46)穴张、對(duì)global變量细燎,應(yīng)該用完就unset()掉;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末皂甘,一起剝皮案震驚了整個(gè)濱河市玻驻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌偿枕,老刑警劉巖璧瞬,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渐夸,居然都是意外死亡嗤锉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)墓塌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘟忱,“玉大人,你說(shuō)我怎么就攤上這事苫幢》糜眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵韩肝,是天一觀(guān)的道長(zhǎng)触菜。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伞梯,這世上最難降的妖魔是什么玫氢? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任帚屉,我火速辦了婚禮,結(jié)果婚禮上漾峡,老公的妹妹穿的比我還像新娘攻旦。我一直安慰自己,他們只是感情好生逸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布牢屋。 她就那樣靜靜地躺著,像睡著了一般槽袄。 火紅的嫁衣襯著肌膚如雪烙无。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天遍尺,我揣著相機(jī)與錄音截酷,去河邊找鬼。 笑死乾戏,一個(gè)胖子當(dāng)著我的面吹牛迂苛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鼓择,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼三幻,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了呐能?” 一聲冷哼從身側(cè)響起念搬,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摆出,沒(méi)想到半個(gè)月后朗徊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懊蒸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年荣倾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了悯搔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骑丸。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖妒貌,靈堂內(nèi)的尸體忽然破棺而出通危,到底是詐尸還是另有隱情,我是刑警寧澤灌曙,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布菊碟,位于F島的核電站,受9級(jí)特大地震影響在刺,放射性物質(zhì)發(fā)生泄漏逆害。R本人自食惡果不足惜头镊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望魄幕。 院中可真熱鬧相艇,春花似錦、人聲如沸纯陨。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)翼抠。三九已至咙轩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阴颖,已是汗流浹背活喊。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留量愧,地道東北人胧弛。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像侠畔,于是被迫代替她去往敵國(guó)和親结缚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在软棺,面了一些公司红竭,掛了不少,但最終還是拿到小米喘落、百度茵宪、阿里、京東瘦棋、新浪稀火、CVTE、樂(lè)視家的研發(fā)崗...
    時(shí)芥藍(lán)閱讀 42,194評(píng)論 11 349
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理赌朋,服務(wù)發(fā)現(xiàn)凰狞,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法沛慢,類(lèi)相關(guān)的語(yǔ)法赡若,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法团甲,異常的語(yǔ)法逾冬,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • Php:腳本語(yǔ)言,網(wǎng)站建設(shè),服務(wù)器端運(yùn)行 PHP定義:一種服務(wù)器端的HTML腳本/編程語(yǔ)言,是一種簡(jiǎn)單的身腻、面向?qū)ο?..
    廖馬兒閱讀 2,116評(píng)論 2 38
  • [TOC] 斯科特·楊在他的《如何高效學(xué)習(xí)》中說(shuō)到:如果只用一種方式了解某樣事物产还,你就不會(huì)真正了解它。了解事物整整...
    喜歡艾薇兒和小甜甜閱讀 397評(píng)論 0 0