目前日期文章:200701 (32)

瀏覽方式: 標題列表 簡短摘要
這個東西的編譯方式也不太一樣,他需要先把 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 發表在 痞客邦 PIXNET 留言(0) 人氣()

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

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

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

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

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

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

HACGIS 發表在 痞客邦 PIXNET 留言(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 發表在 痞客邦 PIXNET 留言(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 發表在 痞客邦 PIXNET 留言(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 發表在 痞客邦 PIXNET 留言(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 發表在 痞客邦 PIXNET 留言(0) 人氣()

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

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

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

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

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

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

不要被標題嚇到了,這篇文章沒有教你如何用非法途徑拿到微軟的產品,這裡所提到的東西都是可以從微軟網站上合法且免費取得的,我只是教你如何把這些開發工具塞到一張DVD裡面。

準備下載:
  • .NET Framework 3.0(包含2.0)
  • Visual XXX 的光碟映像檔(下載
    • Visual Basic 2005 Express Edition
    • Visual C++ 2005 Express Edition
    • Visual C# 2005 Express Edition

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

底下是有優先順序的:
  1. 找個好工作
  2. 養成良好的作息與習慣
  3. 完成DB Layer的寫作
  4. 學好Ubuntu和FreeBSD
  5. 完成小型Hosting後台管理的Application
  6. 繼續改寫PEAR
  7. 好吃好睡好動畫~

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

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

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

這一篇是完結篇,要談最後一部分:調用 功能的設計。
先看源碼:

    function 開始($註記 = false){
        $this->調用 = array();
        $this->堆疊 = array();

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

今天要談的是有關測試這個功能項目的解說,廢話不多說,來看源碼:


    private function &耗時(&$開始, &$結束){
        $耗時 = array();
        $次數 = count($開始);

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

恩~感謝朋友們的關心,這幾天有點小感冒,不過總算把藍星侵略者143完食。
現在讓我們來看一下源碼解說,以下三個函數是時點這項功能相關的函數:


    function 時點($註記){
        $this->時點[$註記] = microtime(true);

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

讓我們繼續之前的話題,上一次我說會考慮加入自動註記的功能,不過我考慮了一下,決定還是不要,因為我沒辦法假設每個出入口都會被設置進入與離開點,但是在下個版本,我還是會加上一個欄位「函數」,來標明這個時點是屬於哪個函數的,接下來讓我們來看看各項功能的成員函數的解說。

時點:
  • 時點($註記):設定某個時點。
  • 時差($開始, $結束):傳回兩個註記之間的時差。
  • &彙整:時點($表格 = false):將曾紀錄過的時點資訊傳回,若$表格 == true,則傳回HTML的表格資料。

測試:

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

首先讓我來談一下,我改寫的這個量測類別與PEAR::Benchmark有何不同。
  1. 量測是一個單一且未繼承其他類別的單純類別,而Benchmark是繼承PEAR類別且根據功能拆分成三個小類別。
  2. 量測在輸出的部份僅輸出HTML,而Benchmark可選擇輸出HTML及Plain。
  3. 量測在輸出上交由其他的一般函數來處理,而Benchmark則交由成員函數來處理。
  4. 量測在計算上不考慮使用BCmath模組,而Benchmark則有。
  5. 量測在測試函數的方式上可選擇不同的參數傳遞方式,而Benchmark則僅有一種方式。
  6. 量測在調用函數的分析上考慮了多重出口的情況,而Benchmark不考慮。

大致上就如以上所述,接下來我先談一下量測這個類別與其他的程式有何不同,以及為何要如此設計的考量。

量測的類別通常使用於開發過程中,或是在維護階段尋找程式執行的瓶頸,幾乎不會被用在一般正在線上執行的系統中,所以我才會將三個功能全部放在一起。

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

要下載請按這裡
這是我參考PEAR::Benchmark寫出來的一個效能分析物件。
使用方法請參考原始碼以及example.php

這幾天我會把設計上的考量以及為甚麼要如此設計分幾篇文章寫出來。

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

目前我認識的人裡面,像我一樣「大量」使用中文來作變數名稱、認真寫程式的人,我只認識一位,只不過他是寫JAVA的高手。

用中文來寫程式不是什麼稀奇的事情,但重點在於我為何「一定」要用中文寫程式呢?
當然這是有理由的,請聽我詳述:
  1. 我希望在我的專業領域使用中文
  2. 我希望我的中文比其他的語文好
  3. 我希望我寫出來的程式比較易懂

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

話說我這個使用參照到病態的人,來寫這個應該蠻適合的。

首先要提得是為甚麼要使用參照?
最重要的理由是為了減少複製變數的成本,這個成本包括記憶體的使用以及時間上的消耗。
如果你看過PHP的原始碼,PHP的變數基本上是由ZVAL這個結構所控制的,所以不管是不是使用參照,當我們作函數的參數傳遞、返回值以及變數賦值的時候,這個結構的產生是不可避免的。

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

1 2
找更多相關文章與討論