PHP对编辑器上传的图片进行管理
文章中总会有图片若干。在增加文章或者单页页面的过程中会自动上传到网站的图片目录中。但在修改文章的过程中如果对图片进行相关的删除操作,虽然在代码中已经删除了数据的标签,<img src="..."/>类似于这样的标签。但是图片的文件依旧存在于网站上(图片目录)。这时候需要一定的管理。
处理思想:
1、记录所有上传的图片的路径地址文件名等信息。
2、在管理图片的地方,遍历每一张图片和每一篇文章,查找图片的地址是否存在于某一篇文章的内容中。
处理办法:
1、创建一个管理图片用的数据表,例如:
字段 | 注释 |
---|---|
id | ID |
url | 图片地址 |
2、在每上传一张图片的时候,添加一条 url内容为图片地址 的数据保存到上述所创建的数据表中。
3、在管理图片用的页面,通过以下SQL语句查找出每一张图片被引用的次数:
表名 | 注释 |
---|---|
image | 图片管理表 |
article | 文章管理表 |
single_page | 单页管理表 |
SELECT
image.*, -- 这里使用连接的图片信息记录,而不是直接a.*。因为a.*带有字段count,该内容不全一致
sum(a.count) AS count -- 计算每一张图片总共被引用的次数
FROM
(
SELECT -- 遍历每一条图片记录,并且获取图片地址被多少个页面内容引用
image.*,
(
SELECT
count(*)
FROM
single_page
WHERE
content LIKE concat("%", image.url, "%")
) count
FROM
image
UNION
SELECT
image.*,
(
SELECT -- 遍历每一条图片记录,并且获取图片地址被多少篇文章内容引用
count(*)
FROM
article
WHERE
content LIKE concat("%", image.url, "%")
) count
FROM
image
) a
LEFT JOIN image ON image.id = a.id -- 这里连接图片信息表
GROUP BY
a.id -- 通过id分组
执行以上语句查询并转换为JSON之后,会返回如下结果:
[
{
"id": 1,
"url": "/storage/article/20210321/cf94c2a79434fd53cb9ce7d9d5ed98af.png",
"c_time": "2021-03-21 11:54:19",
"count": 3
},
{
"id": 2,
"url": "/storage/article/20210321/7ba28b5451b9de5a382c95052abfee9e.png",
"c_time": "2021-03-21 11:55:43",
"count": 0
}
]
返回结果解释:
键 | 注释 |
---|---|
id | 图片id |
url | 图片地址 |
c_time | 图片创建时间 |
count | 图片被引用次数(即图片被多少个页面所引用) |
当然,这并不代表就是好的办法。也有可能有更好的办法,亦或者是以上代码可以优化简化。