欢迎访问宙启技术站
智能推送

如何使用PHP函数来压缩与解压缩文件

发布时间:2023-06-16 15:26:02

在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扩展。