【问题标题】:Deleting particular files in a folder删除文件夹中的特定文件
【发布时间】:2014-07-18 16:33:20
【问题描述】:

我有一个名为 Added_images 的数据库表。我的表格包含一个图像名称列表,例如 image-1.jpg、image-2.jpg、image-3.jpg 等

我有一个名为 images 的文件夹。它包含所有上传的图像,例如image-1.jpg、image-2.jpg、image-3.jpg、image-4.jpg、image-5.jpgimage- 6.jpg.

我想根据Added_images 表检查文件夹图像中的每张图片。如果图片在表格中,我想保留它。否则我想删除它。我怎样才能做到这一点?

【问题讨论】:

  • 你的意思是删除所有图片中的文件/如果它不在表格中?
  • image-1.jpg、image-2.jpg、image-3.jpg等图片都在mysql表中。所以这些图像不应该被删除。其他的(image-4.jpg, image-5.jpg, image-6.jpg)应该被删除。

标签: php mysql directory


【解决方案1】:
  1. 使用scandirglob(或其他)获取包含您目录中所有文件的数组。
  2. 遍历图像列表,删除数据库中未列出的文件名。

类似:

$files = glob('Added_images/image-*.jpg');
$databaseFiles = getListOfFilesFromDatabase();

foreach ($files as $file) {
    if (!in_array($file, $databaseFiles)) {
        unlink($file);
    }
}

你显然应该在使用前仔细测试它,以防它删除不应该删除的图像......

编辑:

仔细想想,你可能可以更清楚地表达这一点:

$files = glob('Added_images/image-*.jpg');
$databaseFiles = getListOfFilesFromDatabase();

$filesToDelete = array_diff($files, $databaseFiles);
array_map('unlink', $filesToDelete);

【讨论】:

  • 我检查了你的代码。它显示错误,如警告:array_diff() [function.array-diff]: Argument #2 is not an array in C:\wamp\www\php\my_folder\delete.php 在第 29 行警告:array_map() [function. array-map]: 参数 #2 应该是第 30 行 C:\wamp\www\php\my_folder\delete.php 中的一个数组
  • 您是否实现了一个名为getListOfFilesFromDatabase() 的函数,该函数返回一个包含数据库文件列表的数组?
猜你喜欢
  • 1970-01-01
  • 2013-03-20
  • 2012-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-19
  • 2014-03-27
  • 1970-01-01
相关资源
最近更新 更多