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

如何用PHP解压目录中最新Zip文件或通配符匹配解压后删除

解压目录中最新Zip文件或批量处理Zip文件的解决方案

一、解压最新的Zip文件

ZipArchive::open()不支持通配符,需先筛选出目录内最新的Zip文件:

// 指定目标目录
$dir = '/home/';
// 获取目录下所有Zip格式文件
$zipFiles = glob($dir . '*.zip');

if (empty($zipFiles)) {
    echo '未找到任何Zip文件';
    exit;
}

// 按文件修改时间倒序排序,取第一个即为最新文件
usort($zipFiles, function($a, $b) {
    return filemtime($b) - filemtime($a);
});
$latestZip = $zipFiles[0];

// 执行解压操作
$zip = new ZipArchive;
$res = $zip->open($latestZip);
if ($res === TRUE) {
    $zip->extractTo($dir);
    $zip->close();
    // 可选:解压完成后删除原压缩文件
    unlink($latestZip);
    echo '最新Zip文件解压完成';
} else {
    echo '解压失败,错误码:' . $res;
}

二、批量解压所有Zip文件并删除原文件

如果需要处理目录下全部Zip文件,可通过循环实现:

$dir = '/home/';
$zipFiles = glob($dir . '*.zip');

if (empty($zipFiles)) {
    echo '未找到任何Zip文件';
    exit;
}

foreach ($zipFiles as $zipFile) {
    $zip = new ZipArchive;
    $res = $zip->open($zipFile);
    if ($res === TRUE) {
        $zip->extractTo($dir);
        $zip->close();
        unlink($zipFile); // 删除原压缩文件
        echo "{$zipFile} 解压并删除成功\n";
    } else {
        echo "{$zipFile} 解压失败,错误码:{$res}\n";
    }
}

原代码无效的原因

ZipArchive::open()要求传入具体的文件路径,不支持*.zip这类通配符匹配。通配符解析需借助glob()函数,它会返回符合规则的所有文件路径数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:30:51