如何在PHP中创建合适的相册应用程序?

时间:2013-08-07 04:34:25

标签: php database filesystems photo-gallery

之前我曾经使用过相册,我找到了两种通过PHP管理它们的方法:

  1. 将图像存储在数据库中 或
  2. 将它们存储在文件系统中
  3. 每个人都有自己的优点和缺点。

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

    但是对于文件系统来说,由于某种原因它只是感觉更好,因为,你知道,照片是图像,并且意味着存储在文件系统中。感觉很对。

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

    1. 照片(当然)
    2. 上传时间
    3. 您是谁/想要标记(或一般标题)
    4. 解决这个问题的正确方法是什么?

5 个答案:

答案 0 :(得分: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)

  1. 我会为每张图片设置一个数字,一个自动递增的数字。
  2. 将它们存储在文件系统中
  3. 将id存储在数据库中,其中包含完整的文件名和所需的所有详细信息,如文件名
  4. 检索时会读出数据库,获取专家图片并显示专业信息

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:1)

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

良好的做法是将图像存储在文件系统中,并将图像ID存储在Database表中并检索它。

答案 4 :(得分:1)

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

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

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

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

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