重新認(rèn)識PHP框架_第1頁
重新認(rèn)識PHP框架_第2頁
重新認(rèn)識PHP框架_第3頁
重新認(rèn)識PHP框架_第4頁
重新認(rèn)識PHP框架_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

本文格式為Word版,下載可任意編輯——重新認(rèn)識PHP框架重新熟悉PHP框架

有好多我們已經(jīng)熟悉和了解的東西,有時候又會帶給我們不一樣的感覺,以下是我用心為大家整理的PHP框架的重新熟悉,從一個全新的角度來詮釋PHP框架。更多內(nèi)容請關(guān)注應(yīng)屆畢業(yè)生網(wǎng)!

有人認(rèn)為,PHP是每次苦求都要初始化資源,這個開銷分外大。由此,PHP不適合使用開發(fā)框架。對于PHP,切實沒有類的耐久化,使得每次苦求都要初始化資源,但是,這并不是開銷的主要問題所在。最主要的問題,是在于開發(fā)PHP框架的人,對PHP本身的特性了解多少。最簡樸的,MVC需要檢測UA,假設(shè)使用PHP自帶的get_browser函數(shù),那斷定是死定了。由于,使用上的便當(dāng)與簡樸,導(dǎo)致的是性能的開銷。認(rèn)為不成使用PHP開發(fā)框架的,還有的觀點是:由于需要每次苦求的時候初始化整個框架。其實,這也是一種曲解。假設(shè)好好看看PHP源碼,就會了解,PHP是按苦求加載需要運行的文件,并不是整個框架。所以,對于框架本身,哪一種框架內(nèi)核代碼時越小,性能越好。

還有觀點:由于PHP這種每苦求初始化資源的機制,也造成了PHP添加跨苦求的高級特性相當(dāng)困難。其實,跨苦求本身,要看在哪一個層面。PHP供給了各類加速的緩存機制。雖然PHP的類是由于目前序列化函數(shù)仍有限制,不能耐久化,但數(shù)據(jù)緩存對PHP的加速是相當(dāng)快的。所以,認(rèn)為由于這一限制,就使得PHP只能是一個保持在一個對比簡樸的web語言上面,這無疑更是錯誤的。PHP不乏大型的高速與高效的網(wǎng)站。并不是這些網(wǎng)站底層就沒有框架。

另外,還有輕信什么測試的結(jié)果。對于測試結(jié)果,我覺得,沒有一絲一毫的可信度。我們無法相信這些測試結(jié)果,主要理由有這么幾個方面。其一,PHP環(huán)境配置,是不是最優(yōu)化配置?其次,測試結(jié)果中所選框架,是不是最優(yōu)框架?僅拿CI與CAKE兩者來說,CI的日志,沒有多種輸出,只有文件輸出。這對于大型網(wǎng)站的管理是極不便當(dāng)?shù)摹5牵僭O(shè)將其改用LOG4PHP,那性能上的損失將會是多少,是不成想象的。理由在于,LOG4PHP是完全照抄的Java。至于CAKE,更是完全照抄RAILS。完全不顧及PHP的性能與語言本身的特性。譬如最簡樸的,大量靜態(tài)方法的使用。勢必造成以空間換時間。CAKE中無處不在的靜態(tài)方法,導(dǎo)致了內(nèi)存中聚積大量的類。這種以空間換時間,是速度加快了,還是性能損失了,有多少人真正系統(tǒng)測試過?CAKE讓RUBY的人了解PHP是對PHP的一個促進,同時,RAILS框架,也使得PHP框架得以注入新的血液,增加了新的開發(fā)思路。但,完全照抄是PHP目前最大的悲劇。這個當(dāng)中的經(jīng)典之作:CAKE:RUBYONRAILS,SMARTY:JavaSTRRUTSLOG4PHP:JAVALOG4J,可悲的是,寫這些抄襲之作的,都是對PHP不太了解,大量照搬RUBY,JAVA中的.算法與函數(shù),有些可以算是翻譯,譬如,LOG4PHP中的PROPERTIIES文件的處理就是這樣,不必再舉更多的實例了。為什么不能把JSF,或TYPESTRY也抄到PHP中,這是由于,假設(shè)沒有很好的PHP功底,這幾乎是不成能的。由于,這兩個東西,假設(shè)也是照抄過來,勢必慢如蝸牛。

再有,理想不用PHP框架開發(fā)大型網(wǎng)站,斷定是錯上加錯。WORDPRESS,DISCUZ這類無框架,無架構(gòu)的極端糟糕的代碼,網(wǎng)上已屢見不鮮。

要訪問數(shù)據(jù)庫,最小的需求,也要把數(shù)據(jù)庫訪問封裝成一個類吧?要舉行錯誤與奇怪管理,也需要一個類吧?假設(shè)是大型的網(wǎng)站,總要有錯誤日志輸出,以便當(dāng)調(diào)視與運行監(jiān)視吧。所以這些,拼一下,也算是PHP開發(fā)框架呀。

看樣子,否認(rèn)PHP應(yīng)當(dāng)有框架的人,斷定也就認(rèn)定,PHP做不了大網(wǎng)站。或者說,認(rèn)定,PHP做大網(wǎng)站,也是垃圾架構(gòu)。這可能是太武斷了。

凡認(rèn)為PHP是反框架的,實際上,是不了解PHP語言的一些瓶頸在何處,無法寫出高效的框架,所以,才這樣認(rèn)為的。

PHP安好編程建議

簡介

要供給互聯(lián)網(wǎng)服務(wù),當(dāng)你在開發(fā)代碼的時候務(wù)必時刻保持安好意識。可能大片面PHP腳本都對安好問題都不在意,這很大程度上是由于有大量的無閱歷程序員在使用這門語言。但是,沒有理由讓你由于對你的代碼的不確定性而導(dǎo)致不一致的安好策略。當(dāng)你在服務(wù)器上放任何涉及到錢的東西時,就有可能會有人嘗試破解它。創(chuàng)造一個論壇程序或者任何形式的購物車,被攻擊的可能性就上升到了無窮大。

背景

為了確保你的web內(nèi)容安好,這里有一些常規(guī)的安好準(zhǔn)那么:

別相信表單

攻擊表單很簡樸。通過使用一個簡樸的JavaScript技巧,你可以限制你的表單只允許在評分域中填寫1到5的數(shù)字。假設(shè)有人關(guān)閉了他們欣賞器的JavaScript功能或者提交自定義的表單數(shù)據(jù),你客戶端的驗證就失敗了。

用戶主要通過表單參數(shù)和你的腳本交互,因此他們是最大的安好風(fēng)險。你理應(yīng)學(xué)到什么呢?在PHP腳本中,總是要驗證傳遞給任何PHP腳本的數(shù)據(jù)。在本文中,我們向你演示了如何分析和防范跨站腳本XSS攻擊,它可能會劫持用戶憑據(jù)甚至更嚴(yán)重。你也會看到如何防止會玷污或毀壞你數(shù)據(jù)的MySQL注入攻擊。

別相信用戶

假定你網(wǎng)站獲取的每一份數(shù)據(jù)都彌漫了有害的代碼。清理每一片面,即便你相信沒有人會嘗試攻擊你的站點。

關(guān)閉全局變量

你可能會有的最大安好漏洞是啟用了register_globals配置參數(shù)。幸運的是,PHP4.2及以后版本默認(rèn)關(guān)閉了這個配置。假設(shè)開啟了register_globals,你可以在你的php.ini文件中通過變更register_globals變量為Off關(guān)閉該功能:

register_globals=Off

新手程序員覺得注冊全局變量很便當(dāng),但他們不會意識到這個設(shè)置有多么危害。一個啟用了全局變量的服務(wù)器會自動為全局變量賦任何形式的參數(shù)。為了了解它如何工作以及為什么有危害,讓我們來看一個例子。

假設(shè)你有一個稱為process.php的腳本,它會向你的數(shù)據(jù)庫插入表單數(shù)據(jù)。初始的表單像下面這樣:

運行process.php的時候,啟用了注冊全局變量的PHP會將該參數(shù)賦值到$username變量。這會比通過$_POST[username]或$_GET[username]訪問它節(jié)省擊鍵次數(shù)。不幸的是,這也會給你留下安好問題,由于PHP會設(shè)置該變量的值為通過GET或POST的參數(shù)發(fā)送到腳本的任何值,假設(shè)你沒有顯示地初始化該變量并且你不夢想任何人去操作它,這就會有一個大問題。

看下面的腳本,假使$authorized變量的值為true,它會給用戶顯示通過驗證的數(shù)據(jù)。正常處境下,只有當(dāng)用戶正確通過了這個假想的authenticated_user函數(shù)驗證,$authorized變量的值才會被設(shè)置為真。但是假設(shè)你啟用了register_globals,任何人都可以發(fā)送一個GET參數(shù),例如authorized=1去籠罩它:

//Define$authorized=trueonlyifuserisauthenticated

ifauthenticated_user

$authorized=true;

?

這個故事的寓意是,你理應(yīng)從預(yù)定義的服務(wù)器變量中獲取表單數(shù)據(jù)。全體通過post表單傳遞到你web頁面的數(shù)據(jù)都會自動保存到一個稱為$_POST的大數(shù)組中,全體的GET數(shù)據(jù)都保存在$_GET大數(shù)組中。文件上傳信息保存在一個稱為$_FILES的特殊數(shù)據(jù)中。另外,還有一個稱為$_REQUEST的復(fù)合變量。

要從一個POST方法表單中訪問username字段,可以使用$_POST[username]。假設(shè)username在URL中就使用$_GET[username]。假設(shè)你不確定值來自哪里,用$_REQUEST[username]。

$post_value=$_POST[post_value];

$get_value=$_GET[get_value];

$some_variable=$_REQUEST[some_value];

?

$_REQUEST是$_GET、$_POST、和$_COOKIE數(shù)組的結(jié)合。假設(shè)你有兩個或多個值有一致的參數(shù)名稱,留神PHP會使用哪個。默認(rèn)的依次是cookie、POST、然后是GET。

推舉安好配置選項

這里有幾個會影響安好功能的PHP配置設(shè)置。下面是一些鮮明理應(yīng)用于生產(chǎn)服務(wù)器的:

register_globals設(shè)置為off

safe_mode設(shè)置為off

error_reporting設(shè)置為off。假設(shè)展現(xiàn)錯誤了,這會向用戶欣賞器發(fā)送可見的錯誤報告信息。對于生產(chǎn)服務(wù)器,使用錯誤日志代替。開發(fā)服務(wù)器假設(shè)在防火墻后面就可以啟用錯誤日志。LCTT譯注:此處據(jù)原文規(guī)律和常識,理應(yīng)是"開發(fā)服務(wù)器假設(shè)在防火墻后面就可以啟用錯誤報告,即on。'

停用這些函數(shù):system、exec、passthru、shell_exec、proc_open、和popen。

open_basedir為/tmp以便保存會話信息目次和web根目次,以便腳本不能訪問這些選定區(qū)域外的文件。

expose_php設(shè)置為off。該功能會向Apache頭添加包含版本號的PHP簽名。

allow_url_fopen設(shè)置為off。假設(shè)你能夠

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論