1

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

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

每个都有自己的优点和缺点。

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

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

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

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

等等

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

4

5 回答 5

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。

于 2013-08-07T04:45:48.323 回答
1
  1. 我会为每个图像设置一个数字,一个自动递增的数字。
  2. 将它们存储在文件系统中
  3. 使用完整的文件名和您想要的所有详细信息(如文件名)将 id 存储在数据库中
  4. 检索时会从数据库中读取,获取propper图片并显示propper信息
于 2013-08-07T04:39:34.363 回答
1

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

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

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

于 2013-08-07T04:40:03.190 回答
1

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

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

于 2013-08-07T04:44:29.143 回答
1

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

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

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

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

在页面中显示时,从照片表中获取所需的记录,并将 photo_path 放在图像的 src 中。

于 2013-08-07T04:46:50.373 回答