Time of Update: 2016-11-21
一、簡介及安裝memcached是一個高效能分布式的記憶體對象緩衝系統, 通常被用於降低資料庫載入壓力以提高動態web應用的響應速度。此擴充使用了libmemcached庫提供的api與memcached服務端進行互動。它還提供了一個session處理器(memcached)。關於memcached的安裝,可參考這篇文章:Ubuntu中memcached的安裝和配置。在安裝php擴充memcached之前,需要先安裝libmemcached,libmemcached是memcached的C/C+
Time of Update: 2016-11-21
這些都是以各種方式處理字串的函數。還有一些專門的章節位於Regex和 URL 處理部分。關於字串的運轉機制,特別是關於單引號、雙引號、逸出序列的資訊,參見字串條目。字串函數大全:addcslashes — 以 C 語言風格使用反斜線逸出字元串中的字元addslashes — 使用反斜線引用字串bin2hex — 將位元據轉換成十六進位表示chop — rtrim 的別名chr — 返回指定的字元chunk_split — 將字串分割成小塊convert_cyr_string — 將字元由一種
Time of Update: 2016-11-21
當使用 PCRE 函數的時候,模式需要由分隔字元閉合包裹。分隔字元可以使任意非字母數字、非反斜線、非空白字元。經常使用的分隔字元是正斜線(/)、hash符號(#) 以及取反符號(~)。下面的例子都是使用合法分隔字元的模式。/foo bar/#^[^0-9]$#+php+%[a-zA-Z0-9_-]%如果分隔字元需要在模式內進行匹配,它必須使用反斜線進行轉義。如果分隔字元經常在 模式內出現,
Time of Update: 2016-11-21
Regex的威力源於它可以在模式中擁有選擇和重複的能力。 一些字元被賦予特殊的涵義,使其不再單純的代表自己,模式中的這種有特殊涵義的編碼字元 稱為 元字元。共有兩種不同的元字元:一種是可以在模式中方括弧外任何地方使用的,另外一種 是需要在方括弧內使用的。
Time of Update: 2016-11-21
反斜線有多種用法。首先,如果緊接著是一個非字母數字字元,表明取消 該字元所代表的特殊涵義。這種將反斜線作為逸出字元的用法在字元類 內部和外部都可用。比如,如果你希望匹配一個 "*" 字元,就需要在模式中寫為 "\*"。 這適用於一個字元在不進行轉義會有特殊含義的情況下。 但是, 對於非數字字母的字元,總是在需要其進行原文匹配的時候在它前面增加一個反斜線, 來聲明它代表自己,這是安全的。如果要匹配一個反斜線,那麼在模式中使用
Time of Update: 2016-11-21
自從 PHP 4.4.0 和 5.1.0, 三個額外的逸出序列在選用 UTF-8模式時用於匹配通用字元類型。他們是:\p{xx}一個有屬性 xx 的字元\P{xx}一個沒有屬性 xx 的字元\X一個擴充的 Unicode 字元上面 xx 代表的屬性名稱用於限制 Unicode 通常的類別屬性。 每個字元都有一個這樣的確定的屬性,通過兩個縮寫的字母指定。 為了與 perl 相容, 可以在左花括弧 { 後面增加 ^ 表示取反。比如: \p{^Lu} 就等同於 \P{Lu}。如果通過 \p 或 \P
Time of Update: 2016-11-21
錨在一個字元類外面,在預設匹配模式下, ^ 是一個斷言當前匹配點位於目標字串開始處的斷言。在一個字元類內部, ^ 表明這個字元類中描述的字元取反(詳見下文)。^ 並不一定要是模式的第一個字元, 但是如果處於某個可選分支時, 它應該是該分支的首字元。如果所有選擇分支都以 ^ 開頭,這就是說, 如果模式限制為只匹配目標的開頭, 它被稱為是一個 ”緊固” 模式。(同樣也有其他方式可以構造出緊固模式)$ 是用於斷言當前匹配點位於目標字串末尾,
Time of Update: 2016-11-21
PCRE_CASELESS, PCRE_MULTILINE, PCRE_DOTALL, PCRE_UNGREEDY,PCRE_EXTRA, PCRE_EXTENDED and PCRE_DUPNAMES 等模式修飾符設定可以在模式內部通過一個 perl 選項字元序列來設定, 文法為:(?修飾符),可用的修飾符有:Internal option lettersi for PCRE_CASELESS m for PCRE_MULTILINE s for
Time of Update: 2016-11-21
子組通過圓括弧分隔界定,並且它們可以嵌套。 將一個模式中的一部分標記為子組(子模式)主要是來做兩件事情:將可選分支局部化。比如,模式cat(arcat|erpillar|)匹配 ”cat”, “cataract”, “caterpillar” 中的一個,如果沒有圓括弧的話,它匹配的則是 ”cataract”, “erpillar” 以及Null 字元串。將子組設定為捕獲子組(向上面定義的). 當整個模式比對後, 目標字串中匹配子組的部分將會通過 pcre_exec()() 的 ovector
Time of Update: 2016-11-21
重複次數是通過量詞指定的,可以緊跟在下面元素之後:單獨的字元, 可以是經過轉義的元字元。字元類後向引用(參加下一部分)子組(除非它是一個斷言)一般的重複量詞指定了一個最小數值和一個最大數值的匹配次數, 通過花括弧包裹兩個數字,兩個數字之間用逗號隔開的文法定義。 兩個數值都必須小於 65536, 並且第一個數字必須小於等於第二個。 比如: z{2,4} 匹配 ”zz”, “zzz”, “zzzz”。 單個的右花括弧不是特殊字元。 如果第二個數字被省略,但是逗號仍然存在,就代表沒有上限;
Time of Update: 2016-11-21
在PHP官方文檔中,曾經指出最好不要再結尾添加?>結束標記。但我們編程的習慣和使用的IDE都會為我們自動建立php結束標記?>。這個標記使用在正常情況下是不影響程式的啟動並執行。尤其在早期的php4中,這種標記使用不當也不會影響最後的輸出。但我最近遇到了php指令碼結束標記照成頁面無法顯示的問題。首先wap最終的輸出時xml檔案,如果xml檔案格式有問題,則無法顯示結果。在多次檢查輸出過程發現並沒有問題,同樣的代碼再另一台測試機上顯示也無問題。通過firebug查看,最終的輸出主
Time of Update: 2016-11-21
一個斷言就是一個對當前匹配位置之前或之後的字元的測試, 它不會實際消耗任何字元。簡單的斷言代碼有\b、\B、 \A、 \Z、\z、 ^、$ 等等。 更加複雜的斷言以子組的方式編碼。 它有兩種類型:前瞻斷言(從當前位置向前測試)和後瞻斷言(從當前位置向後測試)。一個斷言子組的匹配還是通過普通方式進行的, 不同在於它不會導致當前的匹配點發生改變。 前瞻斷言中的正面斷言(斷言此匹配為真)以 ”(?=” 開始,消極斷言以 ”(?!” 開頭。比如, \w+(?=;)
Time of Update: 2016-11-21
對於同時有最大值和最小值量詞限制的重複項, 在匹配失敗後, 緊接著會以另外一個重複次數重新評估是否能使模式比對。 當模式的作者明確知道執行上沒有問題時, 通過改變匹配的行為或者使其更早的匹配失敗以阻止這種行為是很有用的。考慮一個例子,模式 \d+foo 應用到目標行 123456bar 時:在匹配了 6 個數字後匹配 ”foo” 時失敗,通常的行為時匹配器嘗試使 \d+ 只匹配 5 個數字, 只匹配 4 個數字,在最終失敗之前依次進行嘗試。 一次性子組提供了一種特殊的意義,
Time of Update: 2016-11-22
一般而言,通過隱藏的手段提高安全性被認為是作用不大的做法。但某些情況下,儘可能的多增加一份安全性都是值得的。一些簡單的方法可以協助隱藏 PHP,這樣做可以提高攻擊者發現系統弱點的難度。在 php.ini 檔案裡設定 expose_php = off ,可以減少他們能獲得的有用資訊。另一個策略就是讓 網頁伺服器用 PHP 解析不同副檔名。無論是通過 .htaccess 檔案還是 Apache 的設定檔,都可以設定能誤導攻擊者的副檔名:Example #1 把 PHP 隱藏為另一種語言#
Time of Update: 2016-11-22
php 抽獎機率演算法/* * 不同機率的抽獎原理就是把0到*(比重總數)的區間分塊 * 分塊的依據是物品占整個的比重,再根據隨機數種子來產生0-* 中的某個數 * 判斷這個數是落在哪個區間上,區間對應的就是抽到的那個物品。 * 隨機數理論上是機率均等的,那麼相應的區間所含數的多少就體現了抽獎物品機率的不同。 */ function get_rand($proArr) { $result = array(); foreach ($proArr as $key => $
Time of Update: 2016-11-22
/** * 計算字串的長度(漢字按照兩個字元計算) * * @param string $str 字串 * * @return int */function myStrLen($str){ $length = strlen(preg_replace('/[\x00-\x7F]/', '', $str)); if ($length){ return strlen($str) - $length +
Time of Update: 2016-11-22
本文(解說見代碼注釋)一、substr() && strlen()代碼:<?php/** * 雙方變數為字串時,可用交換方法一 * 使用substr()結合strlen()兩個方法達到交換變數值得目的 */$a = "This is A"; // a變數原始值$b = "This is B"; // b變數原始值echo '交換之前 $a 的值:'.$a.', $b
Time of Update: 2016-11-22
PHP 透明地支援 HTTP cookie。cookie 是一種在遠程瀏覽器端儲存資料並以此來跟蹤和識別使用者的機制。可以用 setcookie() 或 setrawcookie() 函數來設定 cookie。cookie 是 HTTP 標題的一部分,因此 setcookie() 函數必須在其它資訊被輸出到瀏覽器前調用,這和對 header() 函數的限制類似。可以使用輸出緩衝函數來延遲指令碼的輸出,直到按需要設定好了所有的 cookie 或者其它 HTTP 標題。Example #1
Time of Update: 2016-11-22
會話機制(Session)在 PHP 中用於儲存並發訪問中的一些資料。這使可以協助建立更為人性化的程式,增加網站的吸引力。一個訪問者訪問你的 web 網站將被分配一個唯一的 id, 就是所謂的會話 id. 這個 id 可以儲存在使用者端的一個 cookie 中,也可以通過 URL 進行傳遞.會話支援允許你將請求中的資料儲存在超全域數組$_SESSION中. 當一個訪問者訪問你的網站,PHP 將自動檢查(如果 session.auto_start被設定為 1)或者在你要求下檢查(明確通過
Time of Update: 2016-11-22
大多數檔案系統函數使用gzip來壓縮檔,本模組可以協助透明讀取gzip壓縮檔。在PHP中Zlib支援預設並沒有開啟。需要安裝配置 PHP的時候使用 --with-zlib[=DIR]。下面這個例子開啟了一個臨時檔案來寫入測試字串,然後兩次列印檔案內容。Example #1 簡單的Zlib樣本<?php $filename = tempnam('/tmp', 'zlibtest') . '.gz'; echo