【问题标题】:Efficient way to delete files from server PHP从服务器PHP中删除文件的有效方法
【发布时间】:2018-12-27 12:56:39
【问题描述】:

所以我正在编写一个脚本来从我的服务器中删除图像。基本上我的数据库中有一个表,其中包含建筑物列表,每个建筑物都有多个与id 关联的图像。我将图像保存在服务器上的单个文件夹中,每个图像都具有以下命名格式: buildingID_imagename.jpg。例如,如果我有一个带有id=23 的建筑物,我的文件夹中的图像将显示为23_imagename1.jpg23_imagename2.jpg 等。

现在,我知道如何使用 PHP 使用 unlink 函数删除图像了。但是,要删除所有图像,我需要逐个检查每个文件的文件名,进行拆分字符串操作,检查 id 然后删除。当我在该文件夹中有 10000 张图像时,就会出现问题。这将成为一项昂贵的任务,尽管它会起作用。

我的问题,有没有一种简单的方法可以检查图像名称并将其从文件夹中删除?

谢谢

编辑 输入此内容后,我只是想到了一种可能的方法。将我的数据库表中的所有图像链接放入一个数组中,遍历它并删除那些。这是一个很好的方法吗?当然,在将图像放入数组后,我也会将它们从表中删除。

【问题讨论】:

  • 如果您将名称存储在数据库表中,您只需检查file_exists(),然后检查unlink($file)。将表中的名称准备成数组是一个很好的解决方案,而不是使用文件操作。
  • exec('rm 23_*') 这将删除从 23_ 开始的所有文件
  • @Tyr 我认为这是一个很好的解决方案。
  • @ponury-kostek 这很有趣,使用这个有什么问题吗?它是如此简单和真棒

标签: php performance


【解决方案1】:

遍历数据集,检查文件是否存在并删除文件。

如果您认为此操作中可能有数千个文件,可以将其作为 cron 作业执行。

if(file_exists($fileName)){
    unlink($fileName);
}

【讨论】:

    【解决方案2】:

    你也可以使用

    <? array_map ('unlink',glob('23_imagename*.jpg')); ?> // this example deletes all files with .jpg extension that starts with 23_imagename

    使用 glob 函数,您可以应用正则表达式来有效地查找要删除的文件

    http://php.net/manual/en/function.glob.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多