代码之家  ›  专栏  ›  技术社区  ›  Lotus Notes

跟踪图像文件的链接或引用并删除未使用的文件(PHP/数据库)

  •  3
  • Lotus Notes  · 技术社区  · 16 年前

    我需要一种方法从我的文件系统中删除“未使用”的图像,即从文件系统的任何一点都无法访问的图像 我的

    问题是,图像可以通过以下任何方式引用:

    1. 硬编码为HTML页面
    2. 硬编码到PHP文件中
    3. 硬编码到CSS文件中
    4. 作为数据库表中的“附件”字段,通常只包含文件名本身,没有路径,因为应用程序假定它将位于某个文件夹中。

    最重要的是,图像的路径可以是一个绝对的或相对的HTTP或PHP路径,也可以不是用PHP中的字符串连接构建的。

    • 用PHP截取图像的HTTP请求,并跟踪HTTP\u REFERER。问题在于,检查时没有人点击链接并不意味着链接不存在。
    • 使用极端的数据库规范化——即为图像创建一个表,并为引用它的任何内容使用外键。然而,这将导致生成一个包含多对多关系(和交叉表)的度量单位,这对于任何常规用户来说都是不切实际的。

    想法/建议?这仅仅是你不得不忽略和忍受的东西吗,即使你正在制作一个有着荒谬数量图片的网站?即使这样做不值得,但仅仅是为了概念验证(我添加了垃圾收集标签,只是因为这可能会在概念上进入该领域)。

    1 回复  |  直到 16 年前
        1
  •  1
  •   ashurexm    16 年前

    我承认我的经历比你的简单。可以说,我没有“用户生成的内容”,我的图片都只存在于模板或数据库中,路径完整。但我所做的是创建一个perl脚本

    • 分析了我的HTML模板,数据库 表和CSS生成了 文件夹
      • <img> 标签
      • 在CSS中,它查找任何.png、.jp*g或.gif正则表达式字符串
      • 这些表很简单,因为我有一个用于图像数据的图像表
    • 命令删除重复项
    • 脚本遍历列表并 写了一个csv,比如: 审计
    • 在另一次迭代中 将.del附加到文件名
    • 带有-docleanup标记的脚本 告诉它把所有的都删掉
    • 如果因为任何原因一个图像被标记 作为戴尔,我不该这样 只是手动将其重新命名为

    几点注意:我意识到我本可以让这个脚本“更流畅”,并在多个步骤中完成多个事情,但它的使用随着时间的推移而增长,我希望清楚地描述处理步骤,这样它就永远不会乱跑。我使用CSV返回并清理图像不存在的信息。