各位好,目前想製作一個相簿網站,有問題想要請益
遊戲規則,普通會員網路空間10MB,3本相本,付費會員1G,,無限相本期限一年
每個會員的照片都在自己的專屬資料夾,建立相簿時是要用參數還是另外建立一個資料夾較好,因為資料夾越細對檔案的搜尋效能較好,但並不是照片都一定要建立相本的,對這塊有點模糊
以這張照片來說(想參考flickr的模式)
http://www.flickr.com/photos/jennipenni/3321063210/
http://www.flickr.com/photos/jennipenni/3321063210/in/set-72157604251705461/
直接點選圖片跟經由相本進去的路徑不同,不知道這塊怎樣規劃比較好。
簡單分析
這兩個網址:
基本規畫
參考一下Ruby on Rails: Up and Running,
可到書店翻翻中文版的 Ruby on Rails:建置與執行
裡面就是以實作相本範例。
1.各個使用者有自己的目錄放所有照片。
2.用資料庫來記錄所有照片檔的相關對應資料。
3.使用者(1) -- 照片(多)
4.使用者(1) -- album(多)
5.照片(多) -- album(多)
其實 album 可以看成是現在流行的 標籤,
所以若要再 照片(多) -- 標籤(多)是同樣的原理。
用多對多實作相本
怎樣做 多對多 的關聯,
在 RoR 上是蠻簡單,
在 php 上,參考怎麼實作標籤的實例,
比較可以套成多對多的相本實作。
1 人 有多相本或多標籤 多照片,這較容易做,
多人 有多相本或多標籤 多照片,這就較複雜些。
這多人有各別的多標籤的實作,
我在 [RoR] 小小複雜建置 Social Tagging 社會標籤功能
及[RoR] 小小複雜模仿 del.icio.us 的個人化的社會標籤 per user tagging (續)
有簡單的範例,RoR 的實作雖對PHP沒太大的幫助,
但其中的inner join的語法,可參考一下;
另外文中也提到這篇文章:
Tags: Database schemas
是討論多人多標籤的schema的幾種可能,
有助於您建置各人多對多標籤或相本的機制。
php 可能也有像 ruby 有做 tagging 的套件,
就可利用 tagging 套件來做多人多相本的機制,
只是再加上是否會員的檢查,
來做是否有多少個相本的限制。
照片路徑
使用者的各照片放在各使用者的目錄,
基本上是還不錯的方式,
可以馬上計算該目錄佔多少容量,
來限制使用者還能不能上傳檔案。
而要仿 flickr 的做法的話,
img 所指到的圖,都是一定的圖的位置,
但要link的網頁要不同。
例如使用者圖檔的實體在:
/user1/photo01.jpg
photo01.jpg 同時屬 album01, album02 的話,
album01,02都只是個參數而已;
網址 /usr1/photo01/album01
其實其實是 傳 album01 的參數,
主要是為了讓該網頁可畫出右邊的該 album 的瀏覽,
其實就是類似:
http://xxx.com.tw/?user=user01&photo=photo01&album=album01
的網址 rewrite,
可參考http://www.bloghash.com/2006/12/apache-mod_rewrite-examples/
rewrite 的例子,在 apache 上可能要設定成類似:
<pre class="c" name="code">
RewriteEngine on
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ /show_pic_with_album.php?user=$1&photo=$2&album=$3 [L]
所以網址是 /使用者代號/照片編號/相本集
但實際上全是用 rewrite、參數 虛擬出目錄的樣子。
希望這些簡單說明對您有幫助。
您的回答讓我受益良多,我每次上傳檔案時都會把該檔案大小也寫進db裡
計算時加總欄位的數字,這樣子會不會比每次都去計算資料夾大小好一點?
檔案大小寫在 db 裡也沒問題,反而會有更多彈性些,
像flickr的網站,
http://www.flickr.com/photos/jennipenni/3321063210/
http://www.flickr.com/photos/jennipenni/2879419453/
兩個都是同個user的照片,
但兩個照片的位置卻是:
http://farm4.static.flickr.com/3607/3321063210_cea8c7910f.jpg
http://farm4.static.flickr.com/3226/2879419453_f03324ff97.jpg
在不一樣的目錄,也可能甚至在不同的機器。
所以flickr除了記錄user照片的大小,也記錄檔案的所在的機器及路徑。
對於網站要能夠scalable而言,
使用者有沒有實體目錄,並不重要,而都是靠db來記錄,
而要考量的是最多幾個檔案在怎樣的目錄安排才有效率,
這是我在 幾十萬個圖檔的目錄要怎麼安排? 曾問題問題,
並沒有很具體理想的解答。
所以,如果是把檔案大小寫入db的話,
可能連檔案所在位置,也寫到db中,
圖檔的安排就可以更有彈性吧。
可以抓網路上的相簿網站的開源碼,再改成需要的功能.
http://www.phpalbum.net/
http://coppermine-gallery.net/