Tommy 碎碎念

Tommy Wu's blog

讓你的 php socket 程式支援 SOCKS5 與 HTTP CONNECT Proxy
post by tommy @ 29 元月, 2013 10:47

最近因為有些程式所在的環境, 對外連線有些麻煩, 所以... 就想加上 proxy 的支援, 而目前最常用的 proxy, 大概就是 SOCKS5 或 HTTP Proxy 了.

一般 php 的程式, 對於 socket 的處理, 通常都是使用 fsockopen() 來處理. 而上頭兩類的 proxy, 都是在一開始連線時, 處理一些 handshake 的動作之後, 就不用再做任何處理了, 後續的動作與你直接連線都一樣. 所以... 我們只要寫一個 function, 用來取代 fsockopen(), 就可以簡單的加上 proxy 的支援了. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
限制 phpBB3 的驗證碼只輸入前四碼
post by tommy @ 18 元月, 2012 12:35

基本上, 這個修改與之前改給 SMF 用的是同一個, 只是針對 phpBB3 來改. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
修正 phpmsnclass 在 big-endian 機器上無法正常登入的問題
post by tommy @ 17 元月, 2012 10:18

看來以前沒有人用 phpmsnclass 這東西在 big-endian 的機器上頭.... 直到昨天有人問我他在登入時一直出現 911 的錯誤, 加了一些除錯訊息之後, 終於發現 pack() 的結果與在 x86/x64 上的結果不一樣. 造成 login 所需要的 BLOB 資料運算錯誤.

因為我只有 x86 的機器, 所以... 自然都用 little-endian 的方式來處理, 所以 pack() 傳入的參數是 'L' (依據 machine 來決定 unsigned long 的儲存方式)... 不過, 在 big-endian 結果就不同了.

所以我們應該在這地方使用 'V' (用 little-endian 的方式處理 unsigned long) 才處理, 這樣不管在 little-endian 或 big-endian 的機器都可以正常使用.

有需要的, 請自行到 Google code 去抓 r61 或之後的版本.

Del.icio.us Furl HEMiDEMi Technorati MyShare
ZendGuardLoader autoload segmentation fault for method_exits()
post by tommy @ 20 十二月, 2011 21:23

這是早上那個 Gallery 3 與 ZendGuardLoader 一起使用時的問題, 寫了一個小的 test case, 可以重製這個錯誤. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
ZendGuardLoader + Gallery3 = segmentation fault?
post by tommy @ 20 十二月, 2011 12:36

如果你在有使用 Zend Guard Loader 的網站中架設 Gallery 3 的話, 在跑完 install 的畫面之後, 你就會發現你的 Gallery 3 永遠都出現一個空白畫面. 這問題... 有人在 Gallery 那邊問, 想當然的.... 得到一個不是我們的問題的答案 (如果我是作者, 我也會這樣回答的), 也有人在 Zend 那邊問, 結果與我以前問 Zend 問題的經驗一樣.... 完全沒有任何作用. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Nginx 對於 PHP 的錯誤轉向處理, fastcgi_intercept_errors 修正
post by tommy @ 19 十二月, 2011 17:54

在一般靜態網頁的處理上頭, nginx 可以正常的顯示一些錯誤的訊息 (如 404 File not found 之類的訊息). 不過對於 PHP (其他用 fastcgi 方式跑的程式也一樣), 預設來說, 如果有什麼錯誤, 往往就看到空白的一個網頁. 而一般的 nginx 教學上頭, 對於這個問題的處理建議就是 fastcgi_intercept_errors on 的設定. 但... 這個方式並不是完美的. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Gallery 3 的 Search 中文修正
post by tommy @ 16 十二月, 2011 15:13

Gallery 3 的 Search 模組中, 是透過 MySQLfull-text search 方式來處理, 不過... 這個方式對於 CJK 之類的文字, 由於無法分辨詞的斷點, 是無法正常運作的. 這個修改, 是把有非英文的 search, 改成 like 來處理 (東西一多, 也許效能會很差, 所以... 如果你的系統這樣子改之後, 找東西變很慢的話, 就不要用了). (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Lifetype 模組: gallery
post by tommy @ 16 十二月, 2011 12:54

這個是以前寫給 LifeType 使用的 gallery 模組的修改版本, 與之前版本的差異就是可以選擇不使用 Gallery 的 embed 方式來存取. (這時相簿的連結會直接轉到 Gallery 的網頁)

檔案放這兒: http://www.teatime.com.tw/~tommy/files/lifetype/lifetype_gallery.tgz

需要的就自己抓回去用吧.

 

Del.icio.us Furl HEMiDEMi Technorati MyShare
Lifetype 模組: minislideshow
post by tommy @ 16 十二月, 2011 12:49

這是給 LifeType 用的 minislideshow plugin, 可以加上一個區塊顯示 minislideshow 的內容. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Gallery 3 模組: imageblock2
post by tommy @ 16 十二月, 2011 12:18

這個模組修改自 Gallery 3 的 imageblockex 模組. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Gallery 3 模組: randimgex
post by tommy @ 16 十二月, 2011 12:04

這個模組是修改自 Gallery 3 的 randimg 模組. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Gallery 3 中文修正 part 1
post by tommy @ 14 十二月, 2011 18:59

Gallery 這軟體很奇怪, 每次改版就是一個全新的程式, 基本上與上一個版本可以當做是完全不同的程式來看待. 據作者的說法, 當初 Galley 2 的出現, 是為了解決在 Gallery 1 上頭的問題.... 而 Gallery 2 看起來是一個很成功的軟體.... 除了整個系統過於肥大之外, 應該也沒什麼缺點. 不過.... 作者還是開發了 Gallery 3, 而且這次的開發應該不太順利吧, 因為由一開始的 beta 到最後正式版的發行, 經過了好幾年. 而且.... 雖然正式版推出了不算短的時間, 整個 Gallery 3 用起來, 我覺得應該還算在 beta 階段吧.... 與 Gallery 2 比起來, 除了用了一些 AJAX 的技巧外, 在功能面上完全比不上舊的 Gallery 2.

如果 Gallery 2 用的還滿意的人, 建議先不要考慮 Gallery 3 吧, 等 3.1 (或 3.2 再來看看). 如果你決定使用 Gallery 3, 那, 這篇與後續的幾篇有關 Gallery 的文章, 應該會對你有些用處. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Gallery2 在 nginx 底下的 rewrite 處理
post by tommy @ 02 十二月, 2011 16:51

由於 Gallery2 只有提供 Apache 的 rewrite 設定, 所以當轉換到 nginx 使用的時候, 就要想辦法自己來改寫. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Nginx/FastCGI/PHP-FPM 相關設定
post by tommy @ 02 十二月, 2011 16:48

上個月中開始, 逐步將家裡機器裡頭的 Apache/mod_php 改成 Nginx/FastCGI/PHP-FPM 來運作. 經過了近兩個星期的嚐試, 目前看起來應該是可以完整的取代了. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
phpmsnclass v1.11
post by tommy @ 15 十一月, 2011 11:03

更新 phpmsnclass 版本為 1.11. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
限制 SMF 的驗證碼只輸入前四碼
post by tommy @ 03 十一月, 2011 12:02

最近發現之前用的 Join Check 方式, 似乎新的 bot 已經有能力處理了, 所以... 就再改一下驗證碼的檢查方式. 採用的是不管原本顯示幾碼的驗證碼, 但是只要求使用者輸入前四碼. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
join_check, SMF 1.x/2.x 註冊防機器人外掛
post by tommy @ 16 七月, 2011 11:56

這與之前在 php 2.x 用的那個類似, 就是改一下註冊時的 form, 加上兩個選項, 一個要選, 另一個不用才能註冊成功. 這樣子應該可以防止多數的 bot 來註冊.

有需要可以抓回去用, 如果無法正常安裝, 就自己解開來看一下要改那邊吧.

1.x 用的版本:
http://www.teatime.com.tw/~tommy/files/join_check_1_0_0.tar.gz

2.x 用的版本:
http://www.teatime.com.tw/~tommy/files/join_check_2_0_0.tar.gz

Del.icio.us Furl HEMiDEMi Technorati MyShare
修正 phpmsnclass v1.10 不能傳送離線訊息的問題
post by tommy @ 23 六月, 2011 20:56

這幾個星期, 發現 phpmsnclass 傳送離線訊息的功能似乎失效了. 今天查了一下, 發現原本用來發送的網站 ows.messenger.msn.com 被 Microsoft 改成 127.0.0.1, 也就表示這網站應該是再也不支援了. 所以... 所有使用這個方式傳送離線訊息的 client (可能所有非官方的 client 都是這樣處理), 都失去傳送離線訊息的功能了.

由於官方的 client 還可以使用, 就看一下傳輸的記錄, 發現是改用 UUM 來傳. 但是在 MSNP15 底下, 這個方法會造成斷線, 所以就照著改用 MSNP18 來處理, 目前看起來是可以正常使用了.

由於 MSNP9/MSNP15 似乎都有問題, 所以就直接移除這兩個協定的支援, 目前就只能使用 MSNP18 了 (所需的模組與 MSNP15 一樣).

有需要的請自行到 Google Code 網站去抓 r53 或之後的版本回來用吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
phpmsnclass v1.10
post by tommy @ 16 二月, 2011 19:25

更新 phpmsnclass 版本為 1.10. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
Zend 終於推出支援 php 5.3 的 ZendGuard loader 了
post by tommy @ 23 十一月, 2010 14:08

在 PHP 5.3 發行近一年半之後, Zend 這家公司 (拖了這麼久, 真懷疑這家公司底層的工程師是不是跑光了, 目前 PHP 用的 Zend Engine 應該是他們家開發的沒錯吧), 終於釋出了支援 PHP 5.3 的 ZendGuard loader (之前叫做 ZendOptimizer) 了.

需要的人可以到這兒下載: http://www.zend.com/en/products/guard/

不過....  連帶 ZendGuard 也要改用 5.5 的新版本才能產生給 PHP 5.3 使用的加密檔案. 不知道授權過期的版本還能不能免費升級, 也許又要再買一次吧. (我們公司買的授權剛滿一年, 倒是還可以用在新的版本上頭)

Del.icio.us Furl HEMiDEMi Technorati MyShare
修正這兩天 phpmsnclass 無法正常使用 MSNP15 的問題
post by tommy @ 25 七月, 2009 13:46

似乎由 7/21 開始, MS 的 server 伺服有些更改, 在 MSNP15 的使用上, 並不會在 USR 指令登入之後送出 SBS 的指令, 這會造成 phpmsnclass 在登入後等待 SBS 的指令而無後續的動作.

所以目前把程式修改一下, 直接在 USR 回應後就處理後續的動作, 不再依靠 SBS 指令處理.

改了之後看起來是正常了. 有使用的朋友, 請更新到 r38 或之後的版本.

Del.icio.us Furl HEMiDEMi Technorati MyShare
修正在 FPDF UTF-8 簡繁中文支援裡頭, AliasNbPages 沒有作用的問題
post by tommy @ 24 四月, 2009 16:31

在之前有提過有人寫了一個 FPDF UTF-8 簡繁中文支援的方案 (作者不是我), 不過, 有使用者反應會造成 AliasNbPages 沒有作用. 剛剛 trace 了一下, 發現在 chinese-unicode.php 裡頭, 就直接把字串轉成 unicode 內碼的十六進位字串了, 所以後來原本的 FPDF 在轉換 AliasNbPages 這個變數時, 自然不會有任何的作用.

舉例來說, 一般內定的 AliasNbPages 是用 {nb} 這個字串, 會變成 007b006e0062007d 的內容, 而在原本的 FPDF 依然是找 {nb}, 自然不會轉換. 因此我們需要針對 chinese-unicode.php 來特別處理這個部份.

你可以在 chinese-unicode.php 的 function PDF_Unicode() 之後,  加上一個 function Uni_putpages() 如下:

function Uni_putpages()
{
if(!empty($this->AliasNbPages)) {
//Replace number of pages
 
// find the pages alias already converted to hex string
$search = '';
$len = strlen($this->AliasNbPages);
for ($i = 0; $i < $len; $i++)
$search .= sprintf("%04x", ord($this->AliasNbPages[$i]));
 
// replace the pages alias with page number (hex format)
$replace = '';
$total_pages = ''.$this->page.'';
$len = strlen($total_pages);
for ($i = 0; $i < $len; $i++)
$replace .= sprintf("%04x", ord($total_pages[$i]));
 
// replace it now
for ($n = 1; $n <= $this->page; $n++)
$this->pages[$n] = str_replace($search, $replace, $this->pages[$n]);
}
}

然後在使用時, 在最後產生 PDF 之前, 記得呼叫這個 function, 如:

$pdf->Uni_putpages();
$pdf->Output();

這樣子應該就可以把頁數轉換出來了.

不過這樣子的處理, 並不保證那個轉換不會造成別的問題. 以內定的 {nb} 來說, 因為只是單純比對 007b006e0062007d 來轉換, 雖然機率不大, 還是有可能會轉錯的. 如果有碰到, 還想避免這個問題, 可以考慮弄個比較複雜的 alias 來使用吧.

Del.icio.us Furl HEMiDEMi Technorati MyShare
phpmsnclass v1.9
post by tommy @ 23 十月, 2008 23:24

更新 phpmsnclass 版本為 1.9. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
在 Win32 下的 PHP 使用 ftp_ssl_connect()
post by tommy @ 07 九月, 2008 10:17

在 php 官方的說明文件中, 提到要使用 ftp_ssl_connect() 必須要有 openssl 的支援才可以. 而且在 Windows 下頭, 必須要自行重新編譯一個內建 openssl 支援的版本才可以. (閱讀全文)

Del.icio.us Furl HEMiDEMi Technorati MyShare
MySPAM v0.0.5
post by tommy @ 06 八月, 2008 13:48

MySPAM v0.0.5 推出. 其實也沒改到什麼, 這些修正好像都至少有半年了. 與前一版本的差異如下:

  • + 新增對同一主機多網域帳號的支援. 登入時請使用 user@domain 的方式登入即可.
  • ! 檢查信件第一行是否為 'From xxx@xxx.xxx.xx' 這個非 header 的內容 (某些 postfix 有這行?), 如有就略過.
  • ! 如果沒有 SIZE 環境變數, 就自行計算信件大小.
程式可以由這兒抓取: http://www.teatime.com.tw/~tommy/myspam/myspam-0.0.5.tgz
或由這兒抓取最後一個版本: http://www.teatime.com.tw/~tommy/myspam/myspam.tgz
0.0.4a to 0.0.5 的 patch: http://www.teatime.com.tw/~tommy/myspam/myspam_004a_to_005.patch  
Del.icio.us Furl HEMiDEMi Technorati MyShare
Bad Behavior 已經阻擋了 52 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS