PHP 判斷 Header 送出前, 是否有值被送出去: headers_sent()

header() 最常被拿來送 header('Location: /'); 等等, 做網頁導向的動作.

除了這些動作外, 還有 setcookie(), header()... 等, 這些 function 在執行前, 頁面上都不能有任何輸出(空白也不行), 若有任何輸出, 就會有下述的錯誤訊息:

<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /var/www/test.php:5) in <b>/var/www/test.php</b> on line <b>6</b><br />

閱讀全文〈PHP 判斷 Header 送出前, 是否有值被送出去: headers_sent()〉

Linux Bash 命令: Join (指定某個欄位為主, 來合併多個檔案)

常會遇到有幾個文字檔, 裡面有幾個欄位是跟另外檔案是一致的, 要把他合併成一個檔案, 這時後最快的就是用 join.

  • Man 說明: join - join lines of two files on a common field

這次遇到的狀況是:

  1. find . -size 0 > a # 找出 size 是 0 的 "圖檔檔名"
  2. b # 從 DB 撈出所有的 "相對應的帳號 => 圖檔檔名"
  3. 要將 size = 0 的圖檔都抓出來, 再將 a 和 b 做 join, 會把 a 和 b 依照 "圖檔檔名" 做結合, 就可知道哪些帳號的圖檔 Size = 0, 再來做其它處理囉~
  4. 註: 要注意要結合的那個欄位, 要先做過 sort, 不然可能會有某些欄位無法 match.
  5. 最後再 find . -size 0 -delete 全部砍掉~ 😛

閱讀全文〈Linux Bash 命令: Join (指定某個欄位為主, 來合併多個檔案)〉

Project release 的 更新/還原 控制 Script

專案完成後, 第一次就直接 Release 即可, 那之後的版本更新應該怎麼辦?

常見的幾種做法:

  1. 開發者更新程式是直接修改線上版
  2. 開發者先在測試環境修改完程式, 再將修改過的程式複製到線上 (或直接 svn release / svn up 蓋掉線上檔案)
  3. 將舊版的 proejct_name mv 做成 舊版project_name-當天日期, 再將新版程式改成 project_name.
  4. 不管哪種版本, 總之全都加上日期(ex: prject_name-日期), 然後用 ln 的方式, 將 project_name link 到最新版的程式.
  5. 最標準的做法: 包裝成 Package, 然後去做 Release, 當有問題時, 可再馬上還原回舊版的程式.

閱讀全文〈Project release 的 更新/還原 控制 Script〉

PHP 分割字串 Function 的速度比較(substr/sscanf/preg_match)

固定長度的字串(假設是 06481a63041b578d702f159f520847f8), 要照固定格式做切割, 使用 PHP 要怎麼切會比較快?

註: 要將此字串切成 => 06 / 48 / 1a63041b578d702f159f520847f8 這三個字串.

閱讀全文〈PHP 分割字串 Function 的速度比較(substr/sscanf/preg_match)〉

PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008

程式的安全, 除了本身自己該注意的事項外, 還有不少偵測程式, 可以幫你避免掉意外狀況.

此文章加上年份的資料, 主要是因為安全性會隨著時間演變, 原本安全的程式也會變的不安全(ex: XSS), 所以本篇文章是 2008 年寫的, 或許到 2009 年就過時囉, 請把此篇當參考, 再去看最新的安全資訊會比較保險.(不過就算過時, 請還是不要把它遺漏掉, 過時的漏洞還是漏洞, 還是會有安全性的問題產生)

關於安全的資訊, 先講結論就是: 網路是危險的. 大家能做到的就是盡可能的保護, 但是無法保證絕對的安全.(另外 安全方便 通常是呈反比的)

閱讀全文〈PHP SQL Injection 和 XSS 的偵測程式 和 程式撰寫注意事項 - 2008〉