程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 最好最實用的PHP二次開發教程

最好最實用的PHP二次開發教程

編輯:關於PHP編程

  

二次開發,簡單的說就是在現有的軟件上進行定制修改,功能的擴展,然後達到自己想要的功能和效果,一般來說都不會改變原有系統的內核。

  

隨著信息化技術的不斷發展,IT行業湧現出了一系列優秀的開源作品,其作者或是個人,或是項目小組,或是軟件公司。選擇和應用這些優秀的開源軟件,並在此基礎上進行符合業務需求的二次開發,將給企業節省信息化成本(時間成本及開發成本)的同時,更能帶來技術上的保障。這就是我們常聽的:站在巨人的肩膀上,你將看的更遠。所以國內很多公司需要二次開發的人才。

  

  4、介紹

  二次開發不僅僅是開發,而更重要的是吸取精華,總結經驗,理順思路,少走彎路,提升自己。

站在巨人的肩膀上,你將看的更遠!!! 

  

  為了讓更多人了解二次開發,並更方便的了解DedeCMS的二次開發,下面將會簡單的介紹關於DedeCMS二次開發的一些基礎和大綱

  

  

目錄結構摘要:

· DedeCMS文件結構分析 熟悉每個文件的基本功能,方便做修改,知道每個文件的大概作用之後,可以方便的對文件進行修改

文件結構摘要:

· DedeCMS數據庫結構分析,至少要熟悉每個表的作用 熟悉每個表的作用,了解幾個核心表的設計及字段的含義,方便拿到新的需求之後,能快速的判斷是否加字段,還是新建表來處理。同時也能理解DedeCMS的數據庫設計思想,把有用的設計思路加到自己的系統中。 

· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登陸,注冊,文檔管理,權限控制,分類管理,模型設置等一些常用流程控制。對幾個核心文件進行解剖,了解其編程技巧及安全機制 

· DedeCMS插件的開發(****式插件和內嵌式插件) 熟悉兩種插件的編寫,插件的導入導出,插件搭配模型的使用

  

      近年來,隨著互聯網的發展,電子商務也跟著一起成長,B2B,C2C,B2C的電子商務模式也不斷的成熟。這時催生出了眾多電子商務相關的PHP開源產品。B2C方面有Ecshop,Zencart,Magento等國內外知名產品。 下面我們就來簡單介紹一下學習Ecshop二次開發的過程和要注意的一些東西:  

  

  

· Ecshop模板更換 熟悉Smarty的精簡版的使用,嵌入自己的界面,EcShop模板的跟換技巧  

· Ecshop二次開發實例 中英文切換的功能,秒殺功能,京東商城模板的制作等   

學習目的:

常見的PHP緩存技術分析[概念版]

 在大部份情況下我們的網站都會使用數據庫作為站點數據存儲的容器。當你執行一個SQL查詢時,典型的處理過程是:連接數據庫->准備SQL查詢->發送查詢到數據庫->取得數據庫返回結果->關閉數據庫連接。但數據庫中有些數據是完全靜態的或不太經常變動的,緩存系統會通過把SQL查詢的結果緩存到一個更快的存儲系統中存儲,從而避免頻繁操作數據庫而很大程度上提高了程序執行時間,而且緩存查詢結果也允許你後期處理。

  

  

這裡所說的數據緩存是指數據庫查詢緩存,每次訪問頁面的時候,都會先檢測相應的緩存數據是否存在,如果不存在,就連接數據庫,得到數據,並把查詢結果序列化後保存到文件中,以後同樣的查詢結果就直接從緩存文件中獲得。

  

  每次訪問頁面的時候,都會先檢測相應的緩存頁面文件是否存在,如果不存在,就連接數據庫,得到數據,顯示頁面並同時生成緩存頁面文件,這樣下次訪問的時候頁面文件就發揮作用了。(模板引擎和網上常見的一些緩存類通常有此功能)

  

  在裡就不介紹了,不是本文所要討論的,只簡單提一下:

  Memcached是高性能的,分布式的內存對象緩存系統,用於在動態應用中減少數據庫負載,提升訪問速度。

  dbcached 是一款基於 Memcached 和 NMDB 的分布式 key-value 數據庫內存緩存系統。

  以上的緩存技術雖然能很好的解決頻繁查詢數據庫的問題,但其缺點在在於數據無時效性,下面我給出我在項目中常用的方法:

  

  檢查文件是否存在並且時間戳小於設置的過期時間,如果文件修改的時間戳比當前時間戳減去過期時間戳大,那麼就用緩存,否則更新緩存。

  設定時間內不去判斷數據是否要更新,過了設定時間再更新緩存。以上只適合對時效性要求不高的情況下使用 ,否則請看下面。

  

  當插入數據或更新數據時,強制更新緩存。

  在這裡我們可以看到,當有大量數據頻繁需要更新時,最後都要涉及磁盤讀寫操作。怎麼解決呢?我在日常項目中,通常並不緩存所有內容,而是緩存一部分不經常變的內容來解決。但在大負荷的情況下,最好要用共享內存做緩存系統。

  到這裡PHP緩存也許有點解決方案了,但其缺點是,因為每次請求仍然要經過PHP解析,在大負荷的情況下效率問題還是比效嚴重,在這種情況下,也許會用到靜態緩存。

  

  這裡所說的靜態緩存是指HTML緩存,HTML緩存一般是無需判斷數據是否要更新的,因為通常在使用HTML的場合一般是不經常變動內容的頁面。數據更新的時候把HTML也強制更新一下就可以了。

  其實一個緩存系統涉及的問題是比較多的,我在這裡只介紹一下我平時的緩存思路,並沒有介紹利用軟件來實現緩存和寫出具體代碼。

  如果您有什麼好的解決方案也請在下面提出,讓我們一起互相探討。

php中使用exec,system等函數調用系統命令

php的內置函數exec,system都可以調用系統命令(shell命令),當然還有passthru,escapeshellcmd等函數。

  在很多時候利用php的exec,system等函數調用系統命令可以幫助我們更好更快的完成工作。比如前二天筆者在批量處理.rar文件時exec就幫我了大忙了。

  今天整理一下常用的調用系統函數發出來和大家分享經驗。

  注意:要想使用這二個函數php.ini中的安全模式必須關閉,要不然為了安全起見php是不讓調用系統命令的。

  先看一下php手冊對這二個函數的解釋:

  exec --- 執行外部程式

  語法 : string exec ( string command [, array &output [, int &return_var]] )

  說明 :

  exec( )執行給予的命令command,不過它並不會輸出任何東西,它簡單的從命令的結果中傳回最後一行,如果你需要去執行一個命令,並且從命令去取得所有資料時,可以使用passthru( )這個函數。

  如果有給予參數array,則指定的數組將會被命令所輸出的每一行填滿,注意 : 如果數組先前已經包含了一些元素的話,exec( )將會把它附加在數組的後面,如果你不想要此函數附加元素的話,你可以在傳遞此數組給exec( )之前呼叫unset( )。

  如果有給予參數array和return_var,則傳回執行的狀態命令將會寫到這個變量。

  注意 : 如果你允許來自使用者輸入的資料,可以傳遞到此函數,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。

  注意 : 如果你使用此函數來啟動一個程式,而且希望在背景裡(background)執行的時候離開它,你必須確定此程式的輸出是轉向(redirected)到一個文件或是一些輸出的資料流,否則PHP將會懸掛(hang)直到程式執行結束。

  system --- 執行外部程式並且顯示輸出

  語法 : string system ( string command [, int &return_var] )

  說明 :

  system( )執行給予的命令command,並且輸出結果。如果有給予參數return_var,則執行命令的狀態碼將會寫到這個變量。

  注意 : 如果你允許來自使用者輸入的資料,可以傳遞到此函數,那麼你應該使用escapeshellcmd( )來確定此使用者無法哄騙(trick)系統來執行武斷的(arbitrary)命令。

  注意 : 如果你使用此函數來啟動一個程式,而且希望在背景裡(background)執行的時候離開它,你必須確定此程式的輸出是轉向(redirected)到一個文件或是一些輸出的資料流,否則PHP將會懸掛(hang)直到程式執行結束。

  如果PHP是運作成伺服器模組,在輸出每一行後,system( )會試著自動地清除web伺服器的輸出緩沖。

  成功則傳回命令的最後一行,失敗則傳回false。

  如果你需要去執行一個命令,並且從命令去取得所有資料時,可以使用passthru( )這個函數。

  這二個都是用來調用系統shell命令,

 

  exec可以把執行的結果全部返回到$output函數裡(數組),$status是執行的狀態 0為成功 1為失敗

  systerm不需要提供$output函數,他是直接把結果返回出來,同樣$return_var是執行的狀態碼 0為成功 1為失敗

開源最大的成功來源於Web

開源運動廣受歡迎,並且在軟件開發史上寫下了濃重一筆。但是它影響最深遠的地方在哪呢?有史以來,最成功的開源“項目”又是什麼呢?

事實上,總體來看,Web不就是開源運動最大的成功麼?

可能最有名的例子就是隱藏域眾多網站背後的LAMP,也就是Linux、Apache、MySQL和PHP。但當你仔細考慮後,你會發現更多。

下面列出了Web得以運轉的一些開源項目。

在網絡浏覽器市場中,雖然微軟的封閉源碼軟件IE浏覽器仍然占有很大的份額,但其它功能相似的開源項目已經流行起來,並在不斷壯大。像Mozilla公司的Firefox浏覽器(它是開源的,還有Flock、PaleMoon)。還有增長迅速的基於Webkit的浏覽器,像Safari,但最著名的是Chrome浏覽器。

如果把手機網絡也算到這裡面,其中Webkit主宰著iPhone、Android和Blackberry手機中的浏覽器。

迄今為止,Apache是使用范圍最廣的網絡服務器軟件,它是開源的,但是一個叫做Nginx的輕量級服務器軟件在最近幾年開始流行起來。事實上,三大頂級網絡服務器軟件中有兩個是開源的(排名第二的微軟的IIS是例外,但其距離第一相差甚遠)。

另外,大量服務器端底層軟件也是開源的。例如,很多大流量網站使用Varnish作為與網站訪問者之間的緩存層,而使用Memcached作為與網站數據庫之間的緩存層。這只是眾多例子中的兩個。

網絡上使用的大部分編程和腳本語言都是開源的,比如PHP、Perl、Python、Ruby等。

但是,很少有網站完完全全是從零開始。毫不誇張的說,有成百上千的開源內容管理系統(CMS)和網絡框架來協助開發人員,例如WordPress、Drupal、Ruby on Rails、Django、Joomla、DedeCMS、Ecshop等。

開源軟件MySQL是目前為止最流行的網站數據庫,但還有其它功能相似的開源軟件,比如PostgreSQL,更不用說近來出現的眾多“非關系型(NoSQL)”數據庫。

既然我們說到了底層軟件,那就不得不提一下每次我們使用互聯網或因特網上的任何東西時都要依靠的基礎系統:

Web(就此而言是整個因特網)離開了域名解析系統就一無是處。大家都知道,域名解析系統可以讓用戶使用像example.com之類的域名,而不是IP地址。BIND幾乎是DNS服務器(亦稱名稱服務器)軟件的實際標准,並且,你現在可能已經猜到了,它是開源的。

所有網站都必須在服務器上運行,而那也是開源的統治領域。雖然Windows統治著桌面領域,但是網站賴以運行的服務器大部分采用開源的Linux操作系統,其他比較流行的選擇是freeBSD和OpenBSD。

由於在許多情況下,開源軟件能夠提供與商業的封閉源碼軟件相同的性能,並且又是免費的,所以開源軟件如此流行並不奇怪。免費是一個難以挑戰的價格。

假如Web不是運行在所有這些免費軟件上,那麼它很可能需要一段艱苦的過程,才能讓人們廣泛接受。

注意我們並沒說過Web中沒有任何封閉源碼軟件,而那顯然是存在的。但是,從統計數據看,Web開源統治領域中真正的例外是微軟的基於Windows系列系統。

除了那個,你通常需要深入研究才能發現更多私有封閉源碼技術,像路由器和類似設備上的操作系統。但那是因特網,而不是Web。

多虧了80年代因特網、便捷通訊以及合作與共享的興起,開源運動才得以蓬勃發展。在90年代,當Web誕生於頂層因特網設備時,開源運動已經准備好助其一臂之力了。

沒有人會否認開源統治著Web的大部分。開源和Web是一個合作共生的關系,互利互惠,合作共贏。這就是為什麼我們認為Web可以說是迄今為止是開源最大的成功。(我們並沒有否定Tim Berners-Lee的意思。注:Tim Berners-Lee,萬維網之父、第一位站長  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved