reCAPTCHA 是什麼? 簡單說就是: "免費提供 驗證碼(Captcha) 功能的服務, 而且還可以幫忙典籍數位化的進行."
閱讀全文〈reCAPTCHA 簡易使用說明 與 PHP版 範例程式〉
標籤: php
PHP Profiling 效能分析追蹤工具 (APD)
當程式寫完後, 發現整頁跑起來速度有點慢, 要追蹤分析是哪邊是造成速度慢的主因, 通常最簡單的方法, 是用 microtime() (可見此文: PHP 測量程式執行時間)來把每個 Function 包起來, 分別看執行時間.
如果太多要追蹤, 懶得這樣子包來包去, 另外一種就是用 PHP Profiling 的工具(APD)來做, 詳可見下述:
不過, 太久沒用這工具, 沒想到 APD 從 2008年到現在(2011), 都沒有新版, 使用 Pecl 安裝, 也無法直接安裝完成, 在此順便把解法紀錄於此.
Mac 的 PHP、MySQL 環境等 快速建置
在 Windows 要弄 Apache、MySQL、PHP 的環境, 最快的方法就是安裝 AppServ - AppServNetwork
在 Mac 的話, 有沒有 "一鍵" 完成的快速環境架設呢?
架設 Nginx + PHP FastCGI 於 Ubuntu Linux 10.04
Nginx 是比較輕巧的 HTTP Server, 此篇主要架設環境是於 Ubuntu Linux 10.04, Debian Linux.
PHP 判斷網址是否正確 / 網頁是否存在
PHP 要判斷網頁是否存在, 簡單的方法就是 fopen / file_get_contents .. 等等, 有一堆的方式可以做, 不過這些方式都會把整頁 HTML 拉回來, 要判斷的網址資料很多時, 就會有點慢.(簡單說, 就是 PHP 如何快速 Check Url 是否存在?)
要判斷可以由 HTTP HEADER 來判斷, 就不用把整頁的內容都抓回來(詳可見: Hypertext Transfer Protocol -- HTTP/1.1).
PHP: 依位址(位置)做 Keyword Bolding
之前有某長輩的需求, 我丟給他一串文字, 他會傳一串文字(結果) 和 一個多維的 array, 此 array 裡面存放的是要加上 html tag 做 bold 效果的位址.(我是比較喜歡直接用 preg_replace 或 str_replace 來直接對 keyword 做這種事, by position 就需要另外寫本篇文章的 function. XD)
流程大概是這樣: (看起來流程式, 如果 B 直接 bold 好, 就不用寫這個 function 了 XD)
- A input "keyword" => B
- B "結果文字" + "斷詞 + array(需要 bold 位址)" => A
- A 根據 B 回傳 "結果文字" 做 bold
經過測試, 如果是 replace keyword 是單一個字, preg_replace 和 str_replace 的效率會好很多, 但是在 replace 的 keyword 是多個字的狀況沒測過, 或許多個字的狀況會比較好(或許 是我寫的太遜了 Orz).
PS: 多個字的狀況會發生在, 一串文字進去, 然後 接收端 會於 處理那串文字時有做斷詞, 所以前端也需要拿到此段文字斷詞用了哪些詞才可以做 replace 的動作.
PHP 測量程式執行時間
程式在執行時, 遇到莫名奇妙執行很久, 但又不知道是什麼問題的時後, 就用此 function 來將每個執行的時間印出來, 將可輕易找出問題所在.
<?php function getMicrotime() { list($usec, $sec) = explode(' ', microtime()); return ((double)$usec + (double)$sec); }?>
使用方法:(以抓 mysql_connect() 時間為例)
<?php $start = getMicrotime(); mysql_connect('localhost', 'id', 'password'); $end = getMicrotime(); $time = $end - $start; echo "mysql_connect 執行時間: $time"; ?>
註: PHP5 以後, 可以採用下述作法:
<?php $time_start = microtime(true); // Sleep for a while usleep(100); $time_end = microtime(true); $time = $time_end - $time_start; ?>
或
<?php $time_start = microtime(true); // Sleep for a while usleep(100); $time = microtime(true) - $time_start; ?>