2013-08-07 35 views
1

我和相冊工作之前,我發現通過PHP管理它們的2種方法:如何在PHP中創建適當的相冊應用程序?

  1. 商店數據庫中的圖像 或
  2. 它們儲存在文件系統中

各有其優點和缺點。

有了數據庫,我可以存儲上傳時間,上傳的時間等。 很難像文件系統那樣做類似的事情(比如非文件相關數據的manifest.json文件) 。

但是對於文件系統,由於某種原因,它會感覺更好,因爲照片是圖像,並且意味着存儲在文件系統中。只是感覺不錯。

但是,什麼是使顯示狀的東西相冊的正確方式:

  1. 照片
  2. 它被上傳的時間(當然)
  3. 你是誰和/要標記(或一般的字幕)

這是怎麼回事?

回答

3

您可以存儲所有信息的一種方式,並且使用文件系統的圖像是通過組合這兩個!

如果您有一個表格,其中包含圖像列表,每個圖像都帶有圖像文件名,上傳時間和標題。

然後,你可以寫一個簡單的類象下面這樣來管理每一個圖像:如果你有一個像這樣在你的數據庫中的表

class Image { 
    private $info; 
    public function __construct(int $id, $mysqli) { 
     $info = $mysqli->query("SELECT * FROM `images` WHERE `id`=" . $id); 
     $this->info = array(); 
     $this->info["id"] = $info["id"]; 
     $this->info["src"] = "/my/path/" . $info["name"] . "." . $info["type"]; 
     $this->info["upload"] = strtotime($info["upload"]); 
     $this->info["tags"] = json_decode($info["tags"], true); 
    } 

    public function Id() { return $this->info["id"]; } 
    public function Src() { return $this->info["src"]; } 
    public function Upload() { return $this->info["upload"]; } 
    public function Tags() { return $this->info["tags"]; } 
} 

這個簡單的類將工作:

+----------------------------------+------------+-----------+-----------------+-------------+ 
| id INT NOT NULL AUTO_INCREMENT | name TEXT | type TEXT | upload DATETIME | tags TEXT | 
+----------------------------------+------------+-----------+-----------------+-------------+ 

所以現在,如果您知道要獲取的圖像的ID,可以使用以下代碼得到它:

$id = 57; 
$img = new Image($id, $connection); 

現在我們可以獲得有關圖像的信息!

echo $img->Id() // output: 57 
echo $img->Src() // output: /my/path/image.png 
echo $img->Upload() // output: 1375858084 

Tags()函數將返回一個數組,JSON從數據庫的列中解碼。

+1

我覺得每個人都有同樣的想法在這裏,我就是這樣的最好的,因爲: 1.我真的不使用多... 2.它確實看起來像「classiest」的方式類做事情(雙關語) 3.感覺很好因爲還在使用文件系統 –

1
  1. 我會爲每個圖像設置一個數字,一個自動遞增數字。
  2. 將它們存儲在文件系統中
  3. 店取回它會讀出的數據庫,當你想喜歡的文件名
  4. 與完整的文件名數據庫和所有細節的ID,得到propper畫面和顯示該propper信息
1

在我以前的經驗使圖像畫廊和相冊一直是一個肯定的數據庫。您仍然可以將圖片上傳到特定的目錄中,同時保留其他數據,例如您提到的內容。

我發現在數據庫中,您還可以更多地控制要使用查詢顯示或隱藏的內容,這也最終轉化爲文件系統的許多工作。

雖然我不一定認爲某種方式是錯誤的,因爲如果它起作用,那麼它就會起作用。

1

在數據庫中存儲圖像絕對不是一個好主意。如果您的應用程序攜帶大量圖像,它可能會影響數據庫性能,或者如果它有更多請求,它甚至可能會崩潰。

好的做法是將圖像存儲在文件系統中並將圖像ID存儲在數據庫表中並檢索相同的圖像。

1

更好的方式來實現你的任務是上傳照片到你的服務器上的目錄(upload/images /或其他)。

然後將圖像的細節保存在數據庫表中。

photos(photo_id, photo_path, upload_time, tags/captions) 

保存圖片在photo_path中的相對路徑。

雖然在頁面中顯示從照片表中獲取所需的記錄,並將photo_path放置在圖像的src中。

相關問題