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)〉

PHP mb_convert_encoding() 指定轉換編碼順序

PHP 轉換編碼會使用 iconv() 或 mb_convert_encoding(), 現在比較常用的是 mb_convert_encoding().

一般使用上, 如果有多種編碼, 可以用下述寫法:

<?php $string = mb_convert_encoding($sring, "UTF-8", "cp950,gb2312,gbk"); ?>

閱讀全文〈PHP mb_convert_encoding() 指定轉換編碼順序〉

PHP Heighlight 語法 與 phps 啓用 (Apache2)

PHP 要秀程式碼, 除了現成的 JavaScript Plugin 等外掛外, 可以使用下述幾種方法:

  • PHP Highlight 的 Function - highlight_string()
  • 或 PHP Highlight 的 Function - highlight_file() 搭配此篇(How do I enable .php file to be color highlight) - 使用 .htaccess + highlight_source.php
    .htaccess如下述:

    Action php-source /var/highlight_source.php
    AddHandler php-source .phps

    highlight_source.php 如下述:
    <?php highlight_file($_SERVER{"DOCUMENT_ROOT"} . $_SERVER{"PATH_INFO"}); ?>

  • 另一個更簡單的方法, 啟用 phps. (*.phps 會自動 Heiglight code, 但是要注意避免把 Source code 不小心公開出去)

閱讀全文〈PHP Heighlight 語法 與 phps 啓用 (Apache2)〉

PHP dba 基本操作 程式範例

PHP 的 DBA(Database (dbm-style) Abstraction Layer) 可以接 Oracle Berkeley DB.

這邊有相容的 DB Layer 列表: PHP: Requirements - Manual

註: 此篇文章的範例使用 db4, 確定 PHP 5.3.3 以上可以正常執行, 不能執行的話, 可以換成 dbm 先測試看看. 🙂

閱讀全文〈PHP dba 基本操作 程式範例〉