之前我曾经使用过相册,我找到了两种通过PHP管理它们的方法:
使用数据库,我可以存储上传时间,上传时间等。 用文件系统做这样的事情比较困难(比如非文件相关数据的manifest.json文件)。
但是对于文件系统来说,由于某种原因它只是感觉更好,因为,你知道,照片是图像,并且意味着存储在文件系统中。感觉很对。
但制作相册的正确方式是什么,显示的内容如下:
等
解决这个问题的正确方法是什么?
答案 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)
答案 2 :(得分:1)
在我过去制作图片库和相册的经历一直都是数据库。您仍然可以将图像上传到特定目录,同时保留其他数据,例如您提到的内容。
我发现使用数据库,您还可以使用查询更好地控制您要显示或隐藏的内容,这也最终会为文件系统带来更多的工作。
虽然我不一定认为一种方法是错误的,因为如果它有效,那么它就可以了。
答案 3 :(得分:1)
在数据库中存储图像绝对不是一个好主意。如果您的应用程序携带大量图像,它可能会影响数据库性能,甚至如果它有更多请求,它可能会崩溃。
良好的做法是将图像存储在文件系统中,并将图像ID存储在Database表中并检索它。
答案 4 :(得分:1)
实现任务的更好方法是将照片上传到服务器中的目录(上传/图片/或其他内容)。
然后将图像的详细信息保存在数据库表中。
photos(photo_id, photo_path, upload_time, tags/captions)
在photo_path中保存图像的相对路径。
在页面中显示时,从照片表中获取所需的记录,并将photo_path放在图像的src中。