如何用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
相关产品推荐
相关产品推荐

