在PHP 7中,可以使用以下代码以低内存使用率解压tar.gz文件:
function extractTarGz($file, $destination) {
$bufferSize = 4096; // 缓冲区大小
$tar = gzopen($file, 'rb'); // 打开tar.gz文件
if (!$tar) {
return false;
}
// 创建目标文件夹
if (!is_dir($destination)) {
mkdir($destination, 0755, true);
}
// 循环读取并解压文件
while ($buffer = gzread($tar, $bufferSize)) {
$fileData .= $buffer;
$pos = strpos($fileData, "\n");
while ($pos !== false) {
$line = substr($fileData, 0, $pos);
$fileData = substr($fileData, $pos + 1);
if (substr($line, -1) == '/') {
// 创建目录
if (!is_dir($destination . '/' . $line)) {
mkdir($destination . '/' . $line, 0755, true);
}
} else {
// 解压文件
file_put_contents($destination . '/' . $line, $fileData);
}
$pos = strpos($fileData, "\n");
}
}
gzclose($tar); // 关闭文件
return true;
}
// 使用示例
$tarFile = 'path/to/archive.tar.gz';
$destinationFolder = 'path/to/destination';
extractTarGz($tarFile, $destinationFolder);
这段代码使用了逐行读取的方式,将tar.gz文件解压到指定目录。它避免了一次性将整个文件读入内存,从而降低了内存使用率。
推荐的腾讯云相关产品:腾讯云对象存储(COS)。
腾讯云对象存储(COS)是一种高可用、高可靠、强安全的云端存储服务,适用于存储和处理任意类型的文件,包括文档、图片、音视频等。您可以将解压后的文件存储到腾讯云对象存储中,实现文件的长期保存和访问。
产品介绍链接地址:腾讯云对象存储(COS)
领取专属 10元无门槛券
手把手带您无忧上云