【问题标题】:How to create a proper photo album application in PHP? [closed]如何在 PHP 中创建一个合适的相册应用程序? [关闭]
【发布时间】:2013-08-07 04:34:24
【问题描述】:

我以前处理过相册,我发现了两种通过 PHP 管理它们的方法:

  1. 将图像存储在数据库中 或
  2. 将它们存储在文件系统中

各有优缺点。

通过数据库,我可以存储上传时间、上传来源等。 用文件系统做这样的事情更难(比如非文件相关数据的 manifest.json 文件)。

但是对于文件系统,它只是出于某种原因感觉更好,因为,您知道,照片是图像,并且旨在存储在文件系统中。感觉刚刚好。

但是,制作显示以下内容的相册的正确方法是什么:

  1. 照片(当然)
  2. 上传时间
  3. 你和谁在一起/想要标记(或一般标题)

等等

解决这个问题的正确方法是什么?

【问题讨论】:

    标签: php database filesystems photo-gallery


    【解决方案1】:

    您可以存储所有信息并使用图像文件系统的一种方法是将两者结合起来!

    如果您有一个包含图片列表的表格,每张图片都包含图片文件名、上传时间和标题。

    然后,您可以编写一个如下所示的简单类来管理每个图像:

    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. 我真的不怎么使用类...... 2. 它看起来确实是“最经典的”做事的方式(双关语) 3. 感觉不错,因为仍然使用文件系统
    【解决方案2】:
    1. 我会为每个图像设置一个数字,一个自动递增的数字。
    2. 将它们存储在文件系统中
    3. 将 id 与完整的文件名和您想要的所有详细信息(如文件名)一起存储在数据库中
    4. 检索时会从数据库中读取,获取道具图片并显示道具信息

    【讨论】:

      【解决方案3】:

      在我过去制作图片库和相册的经验中,肯定一直是数据库。您仍然可以将图像上传到特定目录,同时保留其他数据,例如您提到的内容。

      我发现使用数据库,您还可以使用查询更好地控制要显示或隐藏的内容,这最终也会转化为文件系统的大量工作。

      虽然我不一定认为一种方法是错误的,因为如果它有效,那么它就有效。

      【讨论】:

        【解决方案4】:

        在数据库中存储图像绝对不是一个好主意。如果您的应用程序携带大量图像,则可能会影响数据库性能,甚至在请求更多时可能会崩溃。

        良好的做法是将图像存储在文件系统中,并将图像 ID 存储在数据库表中并检索相同的内容。

        【讨论】:

          【解决方案5】:

          完成任务的更好方法是将照片上传到服务器中的目录(upload/images/ 或其他目录)。

          然后将图像的详细信息保存在数据库表中。

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

          将图片的相对路径保存在photo_path中。

          在页面显示的同时,从photos表中获取需要的记录,并将photo_path放到图片的src中。

          【讨论】:

            猜你喜欢
            • 2014-10-03
            • 2015-09-02
            • 1970-01-01
            • 2014-02-26
            • 2013-02-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多