目前分類:PHP (72)

瀏覽方式: 標題列表 簡短摘要
因為目前我需要了解一下大陸市場,所以打算利用 PHPSurveyor 來做網路問卷。
不過因為目前這套軟體的中文翻譯進度嚴重落後,我打算出手翻譯~

目前繁體中文翻譯的狀態是:全部共1063個句子,其中183個模糊翻譯,0個不良標記,759個未翻譯。
我稍微看了一下已翻譯的部份,只能說看得懂,也有不少翻錯的地方,有些看起來好像是用機器翻譯的。

HACGIS 發表在 痞客邦 留言(0) 人氣()

這一篇主要是針對 函數設計準則 (2) 所作的修訂,為了讓看的人了解變化的過程,我選擇另開一篇來寫。
在過年前其實已經有定見了,不過前幾天跟我的父親吵了一架,心情不是很好,所以遲了幾天才寫,吵架的原因我會另開一篇說明。

首先是函數的特性,從單一處理到批次處理時,針對失敗與中斷的作法,如果要強調「無縫」的特性,其行為特徵應該改成這樣:

HACGIS 發表在 痞客邦 留言(0) 人氣()

我想對於一些用語不精確,造成誤解與討論上的困難,應該是給出一些定義的時候了。
底下是我用對設計階段的意圖所下的定義:
  • 成功:可由函數名稱看出其執行時的意圖,於流程上預期得出之處理。
  • 失敗:與成功相對,於流程上非預期得出之處理。
  • 錯誤:觸及程式語言中無法自理的條件,使得執行程式必須終止之處理。
  • 例外:觸及區域流程上無法自理的條件,但可能借程式語言更正之處理。
很簡略的給出了這幾個定義,或許並不嚴謹,但可以很清楚的看出這四個詞彙的分別。
我認為,資料結構、演算法、重構、設計模式等等,都圍繞在關於「成功」這部份的處理,其他的部份論及較少。
我對於例外處理的態度和這篇相同,除非必要,我盡量不使用例外處理。

HACGIS 發表在 痞客邦 留言(3) 人氣()

對啦,我是知道新版的 PHP 5.2.1 Release 了,不過我個人是暫時不會去更新有關自行編譯的相關文章。
我只提幾個使用上要注意的地方:
  • 目前可以在 PECL4WIN 下到比較新的 DLL 來用。
  • Suhosin Patch 有對應 PHP 5.2.1 的版本可用。
  • Xcache 已有新版對應,雖然有人說拿對應 PHP 5.2.0 版的可以用,不過我自己試的結果是不行。
    • 原因大概知道出在哪,因為我用 CGI 模式執行 PHP,所以掛不上去;如果用 Apache Handler 模式執行的話,就可以用。
    • 前天才把訊息送到 XCache 的論壇上,馬上就有新版出現,真快!(不過有沒有人可以告訴我,dev 和 trunk 這兩個版本有什麼差異?)

HACGIS 發表在 痞客邦 留言(2) 人氣()

石頭在回應這一系列中提到調用者與被調用者的不同觀點,以及四種函數的分別。
我在寫這一系列時其實都想過了,但我著重的部份不是「可不可以」而是「應不應該」,有許多地方我還在調整,但因為部落格可以很快取得不同的迴響,所以我決定先發表再說,文章的內容日後可以再進行整理與修改。

借用石頭的調用者與被調用者的觀點,這篇文章來提一下調用者的部份,先來看個例子:

function 載入:模組集($模組集, $中斷 = true){

HACGIS 發表在 痞客邦 留言(0) 人氣()

話說我個人對函數的設計比類別的設計來的有興趣的多,函數的設計有許多地方是有準則可以遵循的,我希望在我的程式設計生涯中,能找出這些準則。

這篇主要在探討在函數中,執行「中斷」的一些設計準則。
所謂的「中斷」,是一種條件,這種條件使函數執行失敗時跳脫程式既定的「循序流程」,亦可能引發錯誤而使程式停止。

HACGIS 發表在 痞客邦 留言(5) 人氣()

昨天下了 PHP6-dev 來試試看,剛剛裝上去,測試了幾種檔案讀寫狀況,其實在 php.ini 中需要設定的只有底下兩行:
  • unicode.semantics = on
  • unicode.filesystem_encoding = BIG5
第一行 unicode.semantics = on 表示要啟動 Unicode 相關的功能。
第二行 unicode.filesystem_encoding = BIG5 表示指定檔案系統的編碼,這裡我使用 BIG5 是遷就 Windows 系統,如果是在 Linux / FreeBSD 上,應該可以設成 UTF-8。
有個地方要注意:
  • 除了中文,其他的編碼文字不能出現在檔案名稱中,否則會無法操作檔案。
  • 檔案名稱的部份雖然可以用中文,但是寫入檔案時的資料如果含有其他國家的文字,會跑出 Notice ,可以在 fwrite 前加上 @ 來抑制。
  • 載入 PHP 的方式若是用 Apache Handler,在某些常數名稱上會出現錯誤,建議使用 CGI 模式載入 PHP。

HACGIS 發表在 痞客邦 留言(2) 人氣()

上次石頭談了一些有關樣板系統的事情,這次我來介紹我喜歡用的兩套樣板系統:

第一套是 TBS(TinyButStrong),俗稱小強。這套我最早是看到 Neo 的這篇介紹知道的。
這套的優點就是小而快,不過缺點就是要整版輸出,很難用拼版的作法(要繞個彎)。

HACGIS 發表在 痞客邦 留言(0) 人氣()

這幾天生病在家修養,沒有在搞東搞西,讓自己沈澱一下。
思考後發現,目前研究如何在 Windows 下編譯 PHP 模組的部份可以暫時告一段落了。
理由是我發現作這件事情對我的目標並沒有實質的效益,我的目標是開發程式,不是產生開發環境,而有關一開始提到的記憶體使用的函數,可以用其他方式達成,我也實做出來了,因此接下去應以程式開發為主了。

HACGIS 發表在 痞客邦 留言(0) 人氣()

iconv 和 gettext 這兩個 Extensions 必須一起編譯,所以就一同介紹。
要注意的是,目前沒辦法拿最新的版本來編譯,我測試過可以成功的版本號碼如下:
  • iconv:libiconv-1.9.2.tar.gz
  • gettext:gettext-0.14.6.tar.gz
在下載源碼時請務必注意版本號碼,下面介紹編譯步驟:
  1. 源碼可從每個 GNU FTP Mirror 取得:FTP 列表。
  2. 下載後解開至 D:\Work\test\iconv、D:\Work\test\gettext
  3. 切換目錄至 D:\Work\test\iconv,執行:
    • nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MT
    • nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MT install
    • nmake -f Makefile.msvc NO_NLS=1 MFLAGS=-MT distclean
  4. 切換目錄至 D:\Work\test\gettext,執行:
    • nmake -f Makefile.msvc MFLAGS=-MT
    • nmake -f Makefile.msvc MFLAGS=-MT install
  5. 切換目錄至 D:\Work\test\iconv,執行:
    • nmake -f Makefile.msvc MFLAGS=-MT
    • nmake -f Makefile.msvc MFLAGS=-MT install
  6. 現在可以從 C:\usr 中找到編譯所需的檔案:
    • 複製 C:\usr\include 中的 iconv.h 和 libintl.h 至 D:\Work\win32build\include 中
    • 複製 C:\usr\lib 中的 iconv.lib 至 D:\Work\win32build\lib 中
    • 複製 C:\usr\lib 中的 intl.lib 至 D:\Work\win32build\lib 中,並更名為 libintl.lib
  7. 修改 PHP 源碼中的 ext\iconv\config.w32,將第7行:
    • if (/*CHECK_LIB("iconv.lib", "iconv", PHP_ICONV) &&*/
    • 改為
    • if (CHECK_LIB("iconv.lib", "iconv", PHP_ICONV) &&
  8. 修改 php_conf.bat 加上參數 --with-iconv 和 --with-gettext
  9. 重新編譯 PHP,執行:php_make.bat
  10. 編譯完成後安裝請執行:php_make.bat install
  11. iconv 可以動態連結也可以靜態連結,可以單獨載入(可使用 --without-gettext)
  12. gettext 只能靜態連結,且必須與 iconv 一同載入(不可使用 --without-iconv)
  13. 建議將兩者都使用靜態連結

HACGIS 發表在 痞客邦 留言(0) 人氣()

這個東西的編譯方式也不太一樣,他需要先把 PHP 編完後,才能編這個,而且需要將 xdebug.dsp 轉成 xdebug.vcproj 並修改一些地方才能編譯,不過我已經幫你準備好轉好的檔案。
步驟如下:
  1. 源碼:下載
  2. 輔助編譯工具包需使用 2007013001 以後的版本。
  3. 解開後放到 D:\Work\PECL\xdebug 下。
  4. 編譯 PHP 。
  5. 執行 D:\Work\buildtools\PECL\xdebug.bat
  6. 編譯完成後安裝請執行:php_make.bat install
  7. 修改 php.ini 設定
  8. 靜態連結:no
  9. 動態連結:yes

HACGIS 發表在 痞客邦 留言(0) 人氣()

感謝石頭的鼓勵。前幾天可能是太累了,漏看了最後一個步驟...

2007.01.30 追記:
調整一些說明。換掉 Windows SDK 有兩個因素:
  1. Windows SDK 的檔案太新,編譯時常會出現一堆警告,有時還會編譯失敗,所以我把他的順序放到後面,以 Platform SDk 為主。
  2. 有些 Extensions 有提供 .dsp 的檔案,常會需要用 VCE 來匯入轉檔,所以我乾脆就把 VCE 拿來換掉 Windows SDK。

HACGIS 發表在 痞客邦 留言(2) 人氣()

以後輔助編譯包(buildtools.zip)的文件就固定在這裡,有變更會隨時修改,編譯流程請看這裡

假設編譯的工作目錄在 D:\Work,那麼請把下列檔案解開到 D:\Work 下:

編譯時請開一個空白的 CMD,不要用SDK裡面的捷徑,因為相關的環境設定已經寫在輔助編譯包內的批次檔中了。

HACGIS 發表在 痞客邦 留言(0) 人氣()

IMAP 的編譯方式比較奇特,請先看一下解開後的 PHP 源碼目錄中的 ext\imap\IMAP_Win32_HOWTO.txt 這個檔案。
  1. IMAP 源碼:下載,請下載 imap.tar.Z 這個檔案。
  2. 解開後放到 D:\Work\test\imap 中,編輯 D:\Work\test\imap\src\osdep\nt\makefile.nt 這個檔案,找到 CFLAG 那行,把 /MT 改成 /MD。
  3. 切換目錄到 D:\Work\test\imap 中,執行 nmake -f makefile.nt,過程中最後會編譯失敗,但我們仍然可以得到需要的 *.h 及 cclient.lib。
  4. 將 D:\Work\test\imap\c-client\*.h 複製到 D:\Work\win32build\include 中。
  5. 將 D:\Work\test\imap\c-client\cclient.lib 複製並取代 D:\Work\win32build\lib\cclient.lib。
  6. 修改 php_conf.bat 加上參數 --with-imap=shared(IMAP 這個 Extension 只能以動態連結的方式編譯)
  7. 重新編譯 PHP,執行:php_make.bat
  8. 編譯完成後安裝請執行:php_make.bat install
  9. 修改 php.ini 加上 extension=php_openssl.dll
  10. 靜態連結:no
  11. 動態連結:yes

HACGIS 發表在 痞客邦 留言(0) 人氣()

安裝步驟:
  1. 網路上我有找到預編好的 lib 可以使用,在這裡下載
  2. 下載後安裝起來,預設會裝到 C:\OpenSSL 下,請把 C:\OpenSSL\include\openssl 複製到 D:\win32build\include\openssl 下。
  3. C:\OpenSSL\lib\VC 下有許多 libeay*.lib 和 ssleay32*.lib 檔,請選擇相同字尾的 libeay*.lib 和 ssleay32*.lib 各一,複製到 D:\win32build\lib 下,並更名為 libeay.lib 和 ssleay32.lib。
  4. 主檔名最後是 d 的表示是 Debug 版,沒有 d 的是 Release 版
    • MT 表示 Multi-threaded, statically linked  - libcmt.lib,MD 表示 Multi-threaded, dynamically linked - msvcrt.lib
    • 個人建議使用 MT 系列的。
  5. 修改 php_conf.bat 加上 --enable-openssl=[shared] 參數。
  6. 重新編譯 PHP,執行:php_make.bat
  7. 編譯完成後安裝請執行:php_make.bat install
  8. 若使用動態連結,請修改 php.ini 加上 extension=php_openssl.dll
  9. 靜態連結:yes
  10. 動態連結:yes

HACGIS 發表在 痞客邦 留言(0) 人氣()

Suhosin 是一個關於 PHP 安全方面的 Patch,FreeBSD 內建已經會將此 Patch 加入 PHP 編譯。
Suhosin有兩種方式可以增加 PHP 的安全性,一種是使用 Patch 的方式,另一種是使用 Extension 的方式,兩種方式也可以同時使用。

在 Windows 下也可以作這項 Patch,請看以下的步驟來進行:
  1. 下載 Patch ,請注意你所使用的 PHP 版本:下載,這裡假設 Patch 檔的檔名為 suhosin-patch-5.2.0-0.9.6.2.patch。
  2. 工具:patch,可以從 GnuWin32 上取得,或是下載最新的輔助編譯包,裡面也有這些工具。
  3. 將 Suhosin 的 Patch 解開放到 D:\Work 中。
  4. 請切換目錄至 php-x-x-x 中,執行:patch -binary -p 1 -i ../suhosin-patch-5.2.4-0.9.6.2.patch
    • 註:在 Windows 下作 Patch 一定要使用 -binary 參數,這是由於 Windows 與 *nix 中的換行符號不同所必須注意的地方
  5. Patch 完後請重新編譯 PHP,執行:php_make.bat rebuild
  6. 編譯完成後安裝請執行:php_make.bat install

HACGIS 發表在 痞客邦 留言(2) 人氣()

Xcache 屬於 PECL 的 Extension,所以請照下面的步驟來編譯:
  1. 源碼:下載
  2. 工具:m4、grep、sed、gawk、cat 都可以在 GnuWin32 中找到,記得要把 Binaries 和 Dependencies 都抓下來,或是下載最新的輔助編譯包,裡面也有這些工具。
  3. 建立 D:\Work\PECL 目錄,並將源碼解壓縮至 D:\Work\PECL\Xcache 下
  4. 修改 D:\Work\PECL\Xcache\Makefile.frag 的第 21 行:
    • 將 $(GREP) 'export: ' $(XCACHE_PROC_OUT) | $(SED) 's/.*export:\(.*\):export.*/\1/g' | $(XCACHE_INDENT) > $(XCACHE_PROC_H).tmp 改成:
    • $(GREP) "export: " $(XCACHE_PROC_OUT) | $(SED) "s/.*export:\(.*\):export.*/\1/g" | $(XCACHE_INDENT) > $(XCACHE_PROC_H).tmp
    • 也就是將單引號改為雙引號,因為 GunWin32 中的 grep 和 sed 不認得單引號。
  5. 執行 php_config.bat --help 看看有哪些可用的參數,根據你的需要修改 php_conf.bat
    • 目前經我的測試,可用的參數有:
      • --enable-xcache
      • --enable-xcache-optimizer
      • --enable-xcache-coverager
      • --enable-xcache-assembler
      • --enable-xcache-encoder
      • --enable-xcache-decoder
    • 無法使用的參數有:
      • --enable-xcache-disassembler
      • --enable-xcache-test
    • 設定要作動態連結就只需要修改 --enable-xcache=shared 即可,其他的參數無須加上 =shared,預設會使用 --enable-xcache=shared 來編譯,若要作靜態連結,請設定 --enable-xcache
  6. 修改完後請執行:php_make.bat
  7. 編譯完成後安裝請執行:php_make.bat install
  8. 修改 php.ini 加上 xcache 相關的設定,但有一個設定要注意:
    • xcache.shm_scheme = "malloc"
    • 這一項設定請使用 malloc ,預設是 mmap ,但經我測試若設定成 mmap 則 xcache 無法啟動。
  9. 靜態連結:yes
  10. 動態連結:yes

HACGIS 發表在 痞客邦 留言(0) 人氣()

我會慢慢將每個 extension 測試看看,盡量詳細的說明該如何編譯。
下載跟解壓縮我就不多作說明,編譯前請記得 setenv。

lib 編譯階段:
  • 源碼:下載
  • 說明檔:README
  • 編譯方法:nmake -f makefile.msc

HACGIS 發表在 痞客邦 留言(0) 人氣()

兩個禮拜前,我就想為量測增加一個跟記憶體使用量的功能,但是這個功能需要使用到 memory_get_usage 這個函數,而這個函數需要在編譯時指定 --enable-memory-limit 參數才能用,故我自己試試看編譯 PHP。

我看了官方網站的文件,到微軟下載相關檔案,不過我沒有 VC++ 6.0,所以我拿 VC++ 2005 Express 來實驗。
網路上我找到這篇文章,文章很長但解釋的蠻清楚,可惜的是我做到最後一步,碰到 VC++ Runtime 的問題,就過不去了,執行後總會出問題。

HACGIS 發表在 痞客邦 留言(3) 人氣()

下載
更新部份:
  • 刪除 清除()、統計()
  • 顯示() 強制使用utf8編碼
  • 對測試功能的單一測試:陣列()與多重測試:陣列() 刪除傳遞次數參數
  • 對測試功能增加函數一欄,刪除最大、最小兩欄
  • 彙整:時點()、彙整:測試(),執行後自動清除內部使用陣列

HACGIS 發表在 痞客邦 留言(0) 人氣()