卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章1838本站已运行41111

php 批量删除特定哈希值的图片

服务器里面有大量相同的图片,又占用磁盘不说,还不美观,特别是那种显示没有图片那种,下面小编介绍一种利用php 查询图片哈希值删除相同图片的方法:
<?php
// 设置样本图路径
$sampleImage = '/mnt/data/655384b3e490c.jpg'; // 你上传的雪糕筒图路径
$targetDir = __DIR__ . '/Uploads/vod'; // 扫描的目录,递归包括子目录

// 获取图像的MD5哈希
function getImageHash($path) {
    return file_exists($path) ? md5_file($path) : false;
}

// 递归遍历目录,找出所有图片
function findAllImages($dir) {
    $rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
    $images = [];

    foreach ($rii as $file) {
        if ($file->isDir()) continue;

        $ext = strtolower(pathinfo($file->getFilename(), PATHINFO_EXTENSION));
        if (in_array($ext, ['jpg', 'jpeg', 'png', 'gif', 'webp'])) {
            $images[] = $file->getPathname();
        }
    }

    return $images;
}

// 删除与样本图相同的图片
function deleteMatchingImages($imagePaths, $sampleHash) {
    $deleted = [];

    foreach ($imagePaths as $filePath) {
        if (md5_file($filePath) === $sampleHash) {
            unlink($filePath);
            $deleted[] = $filePath;
        }
    }

    return $deleted;
}

// 执行流程
$sampleHash = getImageHash($sampleImage);
if (!$sampleHash) {
    echo "样本图片读取失败。";
    exit;
}

$allImages = findAllImages($targetDir);
$deleted = deleteMatchingImages($allImages, $sampleHash);

// 显示结果
if (empty($deleted)) {
    echo "没有找到匹配的图片。";
} else {
    echo "以下图片已被删除:<br>";
    foreach ($deleted as $img) {
        echo htmlspecialchars($img) . "<br>";
    }
}
?>
扫描 /Uploads/vod/ 下所有子目录
查找所有图片(包括 .jpg, .jpeg, .png, .gif, .webp 等)
对比每张图片的哈希值是否与“雪糕筒”图像相同
若相同就删除

使用方法

  1. 上传你要匹配的样本图片(如 655384b3e490c.jpg)到某个路径。

  2. 修改 $sampleImage 为样本图片路径。

  3. 修改 $targetDir 为你实际的 /Uploads/vod 目录路径(建议用绝对路径或者 __DIR__ 起始)。

  4. 放到你的网站运行一次即可。

卓越飞翔博客
上一篇: 基于python2写的linux下磁盘挂载脚本
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏