Time of Update: 2017-02-27
//counter_simple.php: 簡單記數器<html><head><title>文本計數器</title></head><body><?$count_num=0;// 如果存放計數器檔案已經存在,讀取其中的內容if(file_exists("counter.txt")){ /****************************** 以唯讀方式開啟counter.txt檔案
Time of Update: 2017-02-27
前言:在開發MooPHP的過程中,為了尋找更為高效的緩衝方式,對兩種最常用的緩衝方式進行了測試。PHP常用緩衝方式:第一種,把需要緩衝的資料進行處理,形成PHP可以直接執行的檔案。在需要快取資料的時候,通過include方式引入,並使用。第二種,把需要的資料通過serialize函數序列化後直接儲存到檔案。在需要使用快取資料的時候,通過還原序列化讀入檔案內容並複製給需要的變數,然後使用。測試結果:通過測試我們發現,第二種也就是serialize快取資料的方式更加高效。(資料略去,最後提供了文章地
Time of Update: 2017-02-27
實現 MIME 解碼的類該類實現解碼的方法是 decode($head=null,$body=null,$content_num=-1),為了處理上的方便,要求輸入的是兩個字元數組,在我們的上篇中,所用到的POP類所收取得到的就是兩個這樣的數組,一個是郵件標頭內容,一個是郵件的本文內容。限於篇幅,不對其做詳細的說明,其實現思想跟本文上篇中所介紹的POP類類似。請參考其中的注釋。該類中用到了大量的Regex的操作,對此不熟悉的讀者,請參考Regex的有關資料。class
Time of Update: 2017-02-27
MIME 編碼方式簡介Subject: =?gb2312?B?xOO6w6Oh?=這裡是郵件的主題,可是因為編碼了,我們看不出是什麼內容,其原來的文本是:“你好!”我們先看看 MIME 編碼的兩種方法。對郵件進行編碼最初的原因是因為 Internet 上的很多網關不能正確傳輸8 bit 內碼的字元,比如漢字等。編碼的原理就是把 8 bit 的內容轉換成 7 bit 的形式以能正確傳輸,在接收方收到之後,再將其還原成 8 bit 的內容。MIME
Time of Update: 2017-02-27
初步認識郵件的源檔案本文簡要說明了通過POP3協議收取郵件、MIME郵件的解碼的原理;針對收取和MIME解碼,提供了兩個實用的PHP類,並提供了使用的範例。分為郵件收取、MIME解碼兩個部分。我們已經向您介紹過了郵件的收取,現在讓我們來為您介紹本文的解碼部。在上一篇裡,我們已經完成了一個用PHP通過POP3收取郵件的執行個體,可是在使用這個類的時候,相信你已經看到了,很多的郵件收下來是一堆亂碼,自己根本看不懂!是的。現在的郵件大部分都已經經過了編碼,需要一個解碼的過程才能變成我們習慣的文字、圖片
Time of Update: 2017-02-27
互連網的今天,AJAX已經不是什麼陌生的詞彙了。說起AJAX,可能會立即想起因RSS而興起的XML。XML的解析,恐怕已經不是什麼難題了,特別是PHP5,大量的XML解析器的湧現,如最輕量級的SimpleXML。不過對於AJAX來說,XML的解析更傾向於前台Javascrīpt的支援度。我想所有解析過XML的人,都會因樹和節點而頭大。不可否認,XML是很不錯的資料存放區方式,但是其靈活恰恰造成了其解析的困難。當然,這裡所指的困難,是相對於本文的主角--JSON而言。JSON為何物?我就不重複概念
Time of Update: 2017-02-27
我近期做一個東東,大致構架是:訪問者通過web提交c程式,服務端調用編譯器編譯並且在編譯完成後運行編譯後的程式,將運行結果傳回訪問者瀏覽器。且不考慮安全性,因為訪問者可以都認為是可以信賴的,命令列編譯器最終要返回的,但是對於臨時編譯的程式,儘管使用者是可以信賴的,但是不排除因為不完善而出現死結,php調用後啟動的進程無法返回而逾時,此進程一直存在直到伺服器重啟,久而久之,伺服器端資源就要耗盡。考慮到php本身執行的時候沒有提供多線程和進程管理功能(可能是我沒有看到這方面的資料),使用不管是exe
Time of Update: 2017-02-27
在所有的最簡單的程式中,大多數對象都有一個標識,一個重要的商業應用對象,例如一個Customer 或者一個SKU,有一個或者更多的屬性---id,name,email地址,這樣可以把它從同一個類的其他執行個體區分 開來。此外,對象有一個恒定的標識:它是貫穿於整個應用程式的一個唯一的標識,對於程式員來說, ”customer A”在任何地方就是”customer A”,並且只要你的程式在持續運行時 "customer A"仍然是&
Time of Update: 2017-02-27
在物件導向編程中, 最通常的方法是一個new操作符產生一個對象執行個體,new操作符就是用來構造對象 執行個體的。但是在一些情況下, new操作符直接產生對象會帶來一些問題。舉例來說, 許多類型對象的創造 需要一系列的步驟: 你可能需要計算或取得對象的初始設定; 選擇產生哪個子物件執行個體; 或在產生你需 要的對象之前必須先產生一些協助工具功能的對象。 在這些情況, 新對象的建立就是一個 “過程 ”,不僅是一個操作,像一部大機器中的一個齒輪傳動。問題你如何能輕鬆方便地
Time of Update: 2017-02-27
幾乎所有物件導向的程式中,總有一兩個資源被建立出來,在程式應用中持續被共用使用。例如,這 樣的一個資源,在一個電子商務程式的資料庫連接中使用:這個串連在應用程式啟動時初始化,程式於 是可以有效執行;當程式結束時,這個串連最終被斷開並銷毀。如果是你寫的代碼,沒必要在每時每 刻建立一個資料庫連接,這樣非常低效。已經建立好的串連應該能被你的代碼簡單重複的使用。這個問 題就是,基於以上要求你將如何進行這個資料庫連接?(或者串連其它被迴圈使用的唯一資源,比如一
Time of Update: 2017-02-27
在編寫物件導向的代碼的時,有些時候你需要一個能夠自己根據不同的條件來引入不同的操作對象實 例。例如,一個菜單功能能夠根據使用者的“皮膚”喜好設定來決定是否採用水平的還是垂直的 排列形式,或者一個計費系統可以自行根據使用者的收貨地址來決定稅率。一般來講,一個控制菜 單的對象執行個體包括了add(), delete(), 和 replace()等菜單元素;並通過set()進行配置,用render()
Time of Update: 2017-02-27
物件導向的編程之所以豐富多彩,部分是由於對象間的相互聯絡與作用。一個單一的對象就能封裝一 個複雜的子系統,使那些很複雜的操作能夠通過一些方法的調用而簡化。(無所不在的資料庫連接就是 這樣的一個對象執行個體。)然而經常有這樣的情況,對象間的互動性是如此複雜以至於我們不得 不面對類似“先有雞還是先有蛋”這樣傷腦筋的問題:如何建立並測試這樣一個對象,他要
Time of Update: 2017-02-27
我們通常認為避免使用全域變數是一種好的選擇,因此,對象經常被作為參數從一段代碼傳遞到另一 段。但是傳遞執行個體的一個問題就是對象有時候不知道將要傳遞給誰——?經過一個函數後才被 傳遞到真正需要這個對象的函數。為了編寫,閱讀,修改代碼的方便,最好能夠減少不同對象的 數量,並且能夠將大量廣泛使用的對象統一表示為一個單一,常用的對象。問題:你如何 通過單一的全域的對象來擷取對其它對象的引用?解決方案:“註冊模式”
Time of Update: 2017-02-27
介面的改變,是一個需要程式員們必須(雖然很不情願)接受和處理的普遍問題。程式提供者們修改 他們的代碼;系統庫被修正;各種程式語言以及相關庫的發展和進化。我孩子的無數玩具中有一個簡要地 描述了這個兩難局面:你無法合理安排一個不得其所的人。問題你如何避免因外部庫的 API改變而帶來的不便?假如你寫了一個庫,你能否提供一種方法允許你軟體的現有使用者進行完美地升級
Time of Update: 2017-02-27
若你從事過物件導向的php開發,即使很短的時間或者僅僅通過本書瞭解了一些,你會知道,你可以 通過繼承改變或者增加一個類的功能,這是所有物件導向語言的一個基本特性。如果已經存在的一個php 類缺少某些方法,或者須要給方法添加更多的功能(魅力),你也許會僅僅繼承這個類來產生一個新類 —這建立在額外的代碼上。但是產生子類並不總是可能或是合適的。如果 你希望改變一 個已經初始化的對象的行為,你怎麼辦?或者,你希望繼承許多類的行為,改怎麼辦?前一個,只能在於
Time of Update: 2017-02-27
在一個應用軟體的成型過程中,一些意想不到的商業邏輯到處出現。比如,基於價格的考慮,這個任 務必須減少項目;而那個任務也因為銷售稅而必須選擇合適的比率;而其它的任務也必須因為其他的特 別條件而終止。一些商業規則是簡單的,只需要不到一兩個布爾比較關係就夠了,然而它的規則可能需 要費時的估計,需要查詢資料庫或者使用者輸入資料來引導。通過書寫代碼可以把抽象(比如一條 商業規則)轉化為具體可見的東西。但是抽象物(比如購物方式,稅率,或者計算海運費等等)都有其
Time of Update: 2017-02-27
一些物件導向的編程方式,提供了一種構建對象間複雜網路互連的能力。當對象們串連在一起時,它 們就可以相互提供服務和資訊。通常來說,當某個對象的狀態發生改變時,你仍然需要對象之間 能互相通訊。但是出於各種原因,你也許並不願意因為代碼環境的改變而對代碼做大的修改。也許,你 只想根據你的具體應用環境而改進通訊代碼。或者,你只想簡單的重新構造通訊代碼來避免類和類之間 的相互依賴與相互從屬。問題當一個對象的狀態發生改變時,你如何通知其他對象?是
Time of Update: 2017-02-27
類中的物件導向編程封裝應用邏輯。類,就是執行個體化的對象,每個單獨的對象都有一個特定的身份和 狀態。單獨的對象是一種組織代碼的有用方法,但通常你會處理一組對象或者集合。屬性來自 SQL 查詢的一組資料就是一個集合,就像本書前面章節介紹的 Monopoly 遊戲樣本的對象列表。集合不一定是均一的。圖形化使用者介面架構中的 Window 對象可以收集任意數量的控制對象 - Menu、 Slider 和 Button。並且,集合的實現可以有多種方式:PHP 數字是一個集合,但也是一個散列表,一
Time of Update: 2017-02-27
觀察者模式/*** 定義觀察介面*/interface Subject{ public function Attach($Observer); //添加觀察者 public function Detach ($Observer); //踢出觀察者 public function Notify(); //滿足條件時通知觀察者 public function SubjectState($Subject); //觀察條件}/*** 觀察類的具體實 現*/class Boss
Time of Update: 2017-02-27
一般的計數器程式用的執行外部程式函數 exec(),但很多主機空間(包括收費的)拒絕這個危險操作。我們只好用fread(),fwrite()等檔案讀寫函數,關鍵在於採用哪種方式fopen()開啟檔案。試了N次後,證明以下程式是可行,在收費空間上獲得驗證。count目錄|---count.PHP|---counter.txt|---0~9的數字GIF圖片(0.gif,...,9.gif)以下為引用的內容:1<?2/* 本檔案為count\conut.php */34$countfile =