如何使用PHP函数来压缩与解压缩文件
在PHP中,压缩和解压缩文件可以通过使用内置的函数实现。本文将介绍如何使用PHP函数来压缩和解压缩文件。
一、压缩文件
1. 使用ziparchive类压缩文件
ZipArchive类是PHP内置的处理zip格式文件的类。以下是使用ZipArchive类压缩文件的示例:
$zip = new ZipArchive();
$zipname = 'archive.zip';
if ($zip->open($zipname, ZipArchive::CREATE) === true) {
// 待压缩的文件名数组
$files = array('file1.txt', 'file2.txt', 'file3.txt');
foreach ($files as $file) {
$zip->addFile($file);
}
$zip->close();
echo '文件 ' . $zipname . ' 压缩成功';
} else {
echo '文件 ' . $zipname . ' 压缩失败';
}
在上面的示例中,我们创建了一个ZipArchive对象,然后使用“open()”方法打开一个zip文件,如果文件不存在则创建一个新的zip文件。然后我们使用“addFile()”方法将需要压缩的文件添加到zip文件中,最后再使用“close()”方法关闭zip文件。
2. 使用gzcompress()函数压缩文件
PHP中的gzcompress()函数提供了压缩数据的功能。以下是使用gzcompress()函数压缩文件的示例:
// 待压缩的文件名 $filename = 'file.txt'; // 压缩后的文件名 $gzfilename = 'file.gz'; // 打开原文件 $file = fopen($filename, 'r'); // 读取文件内容 $content = fread($file, filesize($filename)); // 关闭文件 fclose($file); // 使用gzcompress()函数压缩文件内容 $compressed_content = gzcompress($content, 9); // 打开压缩后的文件 $file = fopen($gzfilename, 'w'); // 将压缩后的内容写入文件 fwrite($file, $compressed_content); // 关闭文件 fclose($file); echo '文件 ' . $gzfilename . ' 压缩成功';
在上面的示例中,我们首先打开需要压缩的文件,读取文件内容,然后关闭文件。接着,我们使用gzcompress()函数将读取到的文件内容进行压缩,压缩级别设置为9,最高压缩级别。压缩后的内容保存在“$compressed_content”变量中。最后,我们打开压缩后的文件,将压缩后的内容写入文件中,并关闭文件。
二、解压文件
1. 使用ziparchive类解压文件
以下是使用ZipArchive类解压文件的示例:
$zipname = 'archive.zip';
$zip = new ZipArchive();
if ($zip->open($zipname) === true) {
// 解压缩后的目录
$dest = 'unzip';
// 创建目录
mkdir($dest);
// 解压缩文件
for ($i = 0; $i < $zip->numFiles; $i++) {
$filename = $zip->getNameIndex($i);
if (preg_match('#\/$#', $filename)) {
mkdir($dest . '/' . $filename);
} else {
file_put_contents($dest . '/' . $filename, $zip->getFromIndex($i));
}
}
$zip->close();
echo '文件 ' . $zipname . ' 解压缩成功';
} else {
echo '文件 ' . $zipname . ' 解压缩失败';
}
在上面的示例中,我们创建了一个ZipArchive对象,使用“open()”方法打开需要解压的zip文件。然后我们创建一个目录“unzip”,用于存放解压后的文件。接着进入循环,使用“getNameIndex()”方法获取该zip文件中第$i个文件的名称,然后用正则表达式判断它是否是一个目录。如果是,我们使用“mkdir()”方法创建一个对应的目录。如果不是,那么我们使用“getFromIndex()”方法获取该文件的内容,并使用“file_put_contents()”方法将内容写入解压后的文件中。最后,关闭zip文件并输出解压缩结果。
2. 使用gzuncompress()函数解压文件
PHP中的gzuncompress()函数提供了解压缩数据的功能。以下是使用gzuncompress()函数解压文件的示例:
// 待解压的文件名 $gzfilename = 'file.gz'; // 解压后的文件名 $filename = 'file.txt'; // 打开压缩文件 $file = fopen($gzfilename, 'r'); // 读取压缩文件内容 $content = fread($file, filesize($gzfilename)); // 关闭文件 fclose($file); // 使用gzuncompress()函数解压缩文件内容 $uncompressed_content = gzuncompress($content); // 打开解压后的文件 $file = fopen($filename, 'w'); // 将解压后内容写入文件 fwrite($file, $uncompressed_content); // 关闭文件 fclose($file); echo '文件 ' . $filename . ' 解压缩成功';
在上面的示例中,我们首先打开需要解压的压缩文件,读取压缩文件内容,然后关闭文件。接着,我们使用gzuncompress()函数将读取到的文件内容解压缩,解压后的内容保存在“$uncompressed_content”变量中。最后,我们打开解压后的文件,将解压后的内容写入文件中,并关闭文件。
总结
以上就是使用PHP函数来压缩与解压文件的方法。这里我们介绍了使用ZipArchive类和gzcompress()/gzuncompress()函数的两种方法,你可以根据自己的需要来选择使用哪种方法。需要注意的是,在使用ZipArchive类压缩和解压文件时需要确保服务器开启了ZipArchive扩展。
