PHP 使用 COUNT() 計算 stdClass Object 數量

PHP 要使用 count() 來計算 stdClass Object 數量, 計算出來的數字會有問題, 需要強制轉換成陣列來作計算.

註: 強制轉換方法: (array)$obj_var; 於是就可以 count((array)$obj_var);

閱讀全文〈PHP 使用 COUNT() 計算 stdClass Object 數量〉

好文 - Facebook 的黑客之道 - 2013

Facebook 的黑客之道 的 簡短摘要:

  • PHP 的快速開發能力對 Facebook 以及它所信奉的”黑客之道“來說,顯得尤其關鍵,Facebook 的工程師們勇於尋求改變,並且力求迅速改變,PHP 讓他們能做到這一點。而黑客之道則是驅動著 Zuckerberg 以及全公司前進的不斷迭代的哲學。
  • 從本質上來講,他們不停地更換著網站的地基 -- 而網站本身保持原狀,這就是傳說中的黑客之道。

Facebook 使用 PHP 當底層, 為了 節省資源 + 加快速度, 從最底層(PHP)著手, 發展了下述幾套:

  1. HipHop - 將 PHP code 轉成 C++, 在原始的基礎上提升 500% 至 600%.
  2. HHVM (HipHop Virtual Machine) - HHVM 使用即時編譯,能將 Facebook 的 PHP 代碼在服務器上被執行時轉化為原生計算機語言.

閱讀全文〈好文 - Facebook 的黑客之道 - 2013〉

PHP system()、exec()、shell_exec() 的 差異

PHP 要呼叫 Shell 執行程式的時候, 偷懶有 `ls` 可以使用, 不過, 正規點可以使用 system()、exec()、shell_exec() 這三個 Function 來操作.

system()exec()shell_exec() 這三個 Function 使用上有何差異呢?

閱讀全文〈PHP system()、exec()、shell_exec() 的 差異〉

PHP 使用 Composer 管理套件、函式厙

PHP 套件、函式庫管理官方版都是使用 PEARPecl 等, 但是 PEAR 已經很久沒動靜了, Pecl 的 Package 數量直接瀏覽的話, 心算應該都可以加總完, 所以大家都往其它方向走, ex: PHP Class Scripts.

註: PEAR 套件製作比較繁瑣, 若想製作 PEAR 套件可以使用此工具: Template for Jenkins Jobs for PHP Projects

現在 PHP 有個困擾就是, Package 分散在各地, 需要分開下載、安裝, 升級、管理是個很大的困擾, 不過此問題看來 Composer 都解決掉了, 於是 Package 如雪片般的出現, 詳見: Packagist

註: Amazon Cloud 官方 PHP 套件使用 Composer 來管理.

閱讀全文〈PHP 使用 Composer 管理套件、函式厙〉

PHP 判斷式 0 == 'string' 恆為 true - 2012

簡單的一個判斷式, 如下述:

<?php
$types = 0;
if ($types == 'abc')
    echo 'a';
else
    echo 'b';
?>

答案是印出 a (預期應該要印出 b, 結果卻印出 a)

  • 註1: 這種情況平常比較容易出現在會給預設值的地方, ex: function abc($input, $types = 0) {...}
  • 註2: 目前確定 PHP 5.3, 5.4 都是這樣子的狀況, 看官方說明這個並不算是 Bug, 應該會一直持續下去.

閱讀全文〈PHP 判斷式 0 == 'string' 恆為 true - 2012〉

PHP trim() 過濾掉重複的字元

想要過濾掉換行等字元, 最常用的就是 trim(), trim() 預設會過濾掉於 "此字串前後" 的 下述字元:

  • " " (ASCII 32 (0x20)), an ordinary space. (空白)
  • "\t" (ASCII 9 (0x09)), a tab.
  • "\n" (ASCII 10 (0x0A)), a new line (line feed). (換行)
  • "\r" (ASCII 13 (0x0D)), a carriage return.
  • "\0" (ASCII 0 (0x00)), the NUL-byte.
  • "\x0B" (ASCII 11 (0x0B)), a vertical tab.

閱讀全文〈PHP trim() 過濾掉重複的字元〉

PHP 讀取檔案最後修改時間(防Cache)

Apache、Nginx 會去設定檔案過期時間, 然後使用者的瀏覽器就會 Cache 起來, 下次訪問就不用再要一次檔案, 但是如果檔案更新了, 瀏覽器知道檔案需要來重新抓取呢? (如何防止讀取到 Cache 的檔案?)

一個最簡單的方式, 就是更改 URL, 如下述:

  • http://example.com/demo.jpg → http://example.com/demo.jpg?v=1
  • 註1: Apache、Nginx、CDN 都可以用此方法來解決.
  • 註2: 某些 CDN 廠商不吃 "?" 後面的參數, 就無法使用此種解法.

閱讀全文〈PHP 讀取檔案最後修改時間(防Cache)〉