實現國際化的方式比較多,很多php framework都內建i18n支援,但大部分是基於PHP的數組實現的,這種方法並不推薦。目前最為流行也最通用的方法是gettext。Gettext 用於系統的國際化(I18N)和本地化(L10N),可以在編譯器的時候使用本國語言支援(Native Language Support(NLS)),其可以使程式的輸出使用使用者佈建的語言而不是英文. 關於gettext的更多資料請參見: 下面說說如何利用gettext在你的PHP程式中實現國際化。一、檢查環境需求
Twig是一款快速、安全、靈活的PHP模板引擎,它內建了許多filter和tags,並且支援模板繼承,能讓你用最簡潔的代碼來描述你的模板。他的文法和Python下的模板引擎Jinjia以及Django的模板文法都非常像。 比如我們在PHP中需要輸出變數並且將其進行轉義時,文法比較累贅:複製代碼 代碼如下:<?php echo $var ?><?php echo htmlspecialchars(\$var, ENT_QUOTES, 'UTF-8')
作為一種常用的設計模式,單例模式被廣泛的使用。那麼如何設計一個單例才是最好的呢?通常我們會這麼寫,網上能搜到的例子也大部分是這樣:複製代碼 代碼如下:class A{ protected static $_instance = null; protected function __construct() {
最近項目中要為一個rest服務寫用戶端,其中的簽名校正需要在HTTP Header中產生一個RFC 1123格式的Date。這個問題比較好解決,簡單翻閱了PHP文檔,使用gmstrftime這個函數就能解決。複製代碼 代碼如下:string gmstrftime ( string $format [, int $timestamp = time() ] )調用的代碼如下:複製代碼 代碼如下:echo gmstrftime("%a, %d %b %Y %T
估計不少玩smarty模板的小朋友都遇到過裁切亂碼問題。特別是UTF8編碼的。以下代碼儲存為modifier.truncate2.php 存到smarty libs下的plugin目錄下然後裁剪的時候用$v->content|truncate2:100就搞定了。如果不好用可能是緩衝導致,請速度刪除templates_c下的快取檔案(小編搞的時候遇到緩衝問題。)複製代碼 代碼如下:<?php/** * Smarty plugin * @package Smarty&
HTML(使用方法):複製代碼 代碼如下:<link rel="stylesheet" type="text/css" href="cssmin.php?get=base,style1,style2,global&path=css/&v=20131023" /><script type="text/javascript"
需求:對一個設定檔進行處理,拿出可用的字元來拼接,下面是原始文本,我們要得到這樣的結果,複製代碼 代碼如下:redis -h 127.0.0.1 -p 6379 | select 2redis -h 127.0.0.1 -p 6379 | select 16redis -h 127.0.0.1 -p 6379 | select 8原始文本:複製代碼 代碼如下: 'redis_list' => array( &
MVC 代碼書寫:控制器代碼書寫:複製代碼 代碼如下:<?phpclass IndexController extends Zend_Controller_Action{function init(){$this->registry = Zend_Registry::getInstance();$this->view = $this->registry['view'];$this->view->baseUrl = $this->_request->
這一特性在 PHP5.0x 時候就提出過,後來被取消並安排在 PHP6 中實現。而此次又再次“提前”到了 PHP5.3 發布,可見開發人員對其的重視以及謹慎的態度。官方發布時說明文檔的內容可能已到期(documentation maybe out dated),所以在這裡簡單的說明命名空間的用法:首先是聲明一個命名空間,加入了新的關鍵字 namespace ,其應在類檔案的開頭複製代碼 代碼如下:<?php namespace
Fatal error 一般是不需要捕獲的, 但是在一個複雜的程式中, 如果偶然出現記憶體不足導致fatal error就難以處理了.比如. fatal error 出在MySQL類中fetch的時候. 這個時候就很難定位到真正問題所在了.PHP異常處理中 可以通過set_error_handler來捕獲. 但是卻只能捕獲 NOTICE/WARNING層級的錯誤, 對於E_ERROR是無能為力的.register_shutdown_function
遇到的問題就從先到後的一一說吧。問題1 按照我最初的想法,先上傳檔案再讀取檔案。這裡問題就來了,當檔案較大的時候上傳較慢,導致客戶看到的操作一直處於等待狀態,不人性化。處理辦法:我是這樣做的,大神有更好的辦法,求介紹。我先把檔案上傳上去,然後把檔案存到一個特定的檔案夾就叫 import吧 ,然後返回一個這個檔案名稱字。這樣就確保了檔案是上傳成功的。並且我可以在他返回名字的這一步用js
複製代碼 代碼如下:<?php /* *@im //需要縮放的圖片資源 *@filetype //製作的縮圖檔案類型 *@dstimW //縮放的圖片的寬度 *@dstimH
過幾天網站就要上線了。最近完成了一個小功能,就是LOL資料擷取,比如:我給你一個號,你把這個號是否打過排位?戰鬥力是多少?勝率和所在的總場數資料擷取過來資料都在多玩的網站上可查,所以該做的功能就是遠程抓取。功能沒啥亮點,就是簡單的實現。反正就是JS不能跨域,然後用PHP去跨域,用file_get_content好類或者是curl好,都不重要。重要是的能理解商務程序。上面這個圖就是執行商務程序圖。清楚流程了,然後代碼就好寫了當然說了,這裡就,重點是PHP怎麼去抓取資料的。這裡要介紹一款非常好的PH
那怎麼開始設計一個合格的類呢,一開始就寫class{}的都錯了,正確的是什麼都不寫,而是假設這個類已經存在,這個對象已經存在,各種屬性方法都已經有了,在這個完全的假設下想象下這個對象應該怎麼用,例如我們製作一個縮圖的類,我們希望封裝成一個類,方便下次使用,我們首先需要明確對象是什麼它會做什麼,要製作縮圖本質操作是縮小圖片並輸出,這裡被操作的是圖片,那麼對象就是圖片,由於網站上的圖片不是唯一的我們得告訴這是那張圖片,這就可以假設下這個類已經存在,一開始就得聲明是那張圖片,例如$simg =
這個方法的作用是:php截取含有html標籤的字串,如果標籤未閉合就閉合標籤,防止未閉合的標籤破壞原網頁布局。截取完之後將多餘的內容替換為...或者其他任一字元,支援錨點指定替換到指定位置。/** ============================== 截取含有 html標籤的字串 =========================* @param (string) $str 待截取字串* @param (int) $lenth 截取長度* @param (string)
我們知道資料庫處理sql是一條條處理的,假設購買商品的流程是這樣的:sql1:查詢商品庫存if(庫存數量 > 0){ //產生訂單...
網上關於 PHP 緩衝類的資料很多,不過這個類應該是我見過功能滿足需求,但又無比簡潔的一個。廢話不多說,直接看代碼吧!使用說明:1、執行個體化$cache = new Cache(); 2、設定緩衝時間和緩衝目錄$cache = new Cache(60, '/any_other_path/'); 第一個參數是緩衝秒數,第二個參數是緩衝路徑,根據需要配置。預設情況下,緩衝時間是 3600 秒,緩衝目錄是 cache/3、讀取緩衝$value = $cache->get('data_key'
在開發工作中,使用合適的工具可以最大化地提高效率。此外,大量的開源項目也節省了開發人員重複“造輪”的時間,使得開發人員可以專註於業務的實現。本文介紹10款非常實用且開源的PHP開發協助工具輔助,希望對你有所協助。1. Debugbar DebugBar是一個免費和開源的應用,能夠整合至任何PHP項目中,並收集和展示分析資料。它有沒有任何依賴,支援Ajax請求,包括常用開發庫的通用資料擷取器和收集器。2. Monsta FTP Monsta
到目前為止,你已經瞭解了足夠多的PHP了。該寫個小程式練手了。使用者註冊系統寫一個index.php頁面,有使用者名稱和密碼錶單,post提交到check.php,輸出使用者名稱和"使用者名稱+密碼"的md5值本地建立一個mysql資料庫,名叫segmentfault,建立一個表user,欄位username password將上題check.php接收到的內容存入我們先完成HTML部分:<!DOCTYPE
table.php 複製代碼 代碼如下: <?php header("Content-Type:text/html;charset=utf-8"); $mysqli=new MySQLi("localhost","root","123456","xiaoqiangdb"); if(mysqli_connect_errno){ echo "串連資料庫失敗".mysqli_connect_error(); exit; } ?> <html> <head> <