You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP读取txt文件名列表删除目录非匹配文件的脚本方案

实现方案

你原有代码无法运行是几个低级错误导致的:

  • 路径不匹配:你说明txt文件存放在/home/users/路径下,代码里写的是/home/user/images.txt,少了路径中的s,根本读不到正确的txt文件
  • 匹配逻辑错误:glob返回的是带完整目录路径的文件地址,txt里存的是纯文件名,两者格式不统一,in_array永远匹配不上
  • 删除路径重复拼接:glob拿到的$file已经是完整路径,你删除的时候又拼了一次目录前缀,会指向不存在的路径
  • 没有做内容过滤:直接按换行拆分txt内容会残留空行、换行符、空格,导致名单匹配失效
  • 没有做类型判断:遍历到子目录的时候也会尝试删除,容易引发报错

下面是可以直接运行的代码:

<?php
// 路径配置 请根据实际部署情况核对
$whiteListTxt = '/home/users/images.txt';
$targetImageDir = '/home/user/images/';

// 读取白名单文件,自动过滤空行、每行前后的空白和换行符
$keepFiles = array_filter(
    file($whiteListTxt, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES),
    fn($line) => !empty(trim($line))
);
$keepFiles = array_map('trim', $keepFiles);

// 只遍历目录下的jpeg格式文件,避免误删其他格式内容
$allStoredFiles = glob($targetImageDir . '*.jpeg');

foreach ($allStoredFiles as $fileFullPath) {
    // 跳过非文件项
    if (!is_file($fileFullPath)) {
        continue;
    }
    // 提取纯文件名做匹配
    $currentFileName = basename($fileFullPath);
    if (!in_array($currentFileName, $keepFiles)) {
        unlink($fileFullPath);
    }
}
?>

运行前提醒

  • 首次执行前,先把代码里的unlink($fileFullPath);替换成var_dump('待删除文件:' . $currentFileName);,在浏览器/命令行跑一次,确认输出的待删除文件列表符合预期,再换回删除逻辑,避免误删
  • 确认PHP运行身份对目标图片目录有删除权限、对txt文件有读取权限,否则会抛出权限错误
  • 如果你的图片同时有.jpg后缀,可以再加一行$allStoredFiles = array_merge($allStoredFiles, glob($targetImageDir . '*.jpg'));兼容两种格式

内容的提问来源于stack exchange,提问作者Zythmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 10:27:48