寫 The Paradiso – iCards 程式筆記 Part I
在 The Paradiso – iCards 寄出後, 要做個每張卡片寄出的統計. 我就直接以每個檔名為 key. 每寄一次累加次數. 這當然可以寫到資料庫. 但是, 我個人認為寫到檔案就很好用了.所以就想把記憶體內的 array 資料寫到檔案. 等要做統計的時候, 透過檔案再把記憶體的 array 還原. 所以用到 serialize() 和 unserialize() 兩個 functions. 還算滿簡單使用的.
Pseudo Code 如下 :
如果計數檔案存在 { 把計數檔案還原成 array. 如果要累加的 key 存在 { 就再加 1 } 否則 { 設定該累加的 key 為 1 } 再把記憶體的 array 儲存至檔案 } 否則 { 建立計數檔案 }
程式碼如下 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | // hit counters if (file_exists($counterfile)) { $counter = unserialize(file_get_contents($counterfile)); if (array_key_exists($imgname, $counter)) { $counter[$imgname]++; } else { $counter[$imgname] = 1; } $fp = fopen($counterfile, "w+") or die("I could not open $counterfile."); fwrite($fp, serialize($counter)); fclose($fp); } else { $counter = array(); $counter[$imgname] = 1; $fp = fopen($counterfile, "w+") or die("I could not open $counterfile."); fwrite($fp, serialize($counter)); fclose($fp); } |
被儲存的 array 會長得像下列模樣 :
a:7:{s:12:”DSC06375.jpg”;i:1;s:12:”DSC03007.jpg”;i:2;s:12:”IMGP1645.jpg”;i:3;s:12:”DSC06291.jpg”;i:5;s:12:”DSCF0201.jpg”;i:1;s:12:”DSC05590.jpg”;i:1;s:12:”DSC07558.jpg”;i:1;}[
在上面的例子, 可以清楚的知道serialize() 和 unserialize() 可以省去很多麻煩. 且相當實用. 這個小功能實作後就可以衍生出 top 10, top 20 的小功能. (待續)…