pear php库,PHP 4.4.7 中用 PEAR 类库操作 ZIP 压缩文件

运行 pear install Archive_Tar 命令可以安装 PEAR 的 Tar 的操作类,但是 Tar 文件是个打包归档文件,并没有压缩而使文件占用的空间减少。而运行 pear install Archive_Zip 命令时,报告不能从下载频道找到 PEAR 包文件。于是去网上寻找,在 PEAR 站找到其 2005 年的 beta 0.1.1 测试版,文件是 Archive_Zip-0.1.1.tar。解压到 php.4.4.7\temp\download 下后,再运行 pear install Archive_Zip-0.1.1.tar 命令,就可以从本地安装该 PEAR 包了(注意好多文档只讲 pear install … 安装方法,这个只能在线安装类包)。安装以后,php.4.4.7\PEAR\Archive 下除了 Tar.php 文件,多了个 Zip.php 文件,正是我们需要的。

再运行 list 命令看一下,确实安装上了:

C:\usr\local\php.4.4.7>pear list

INSTALLED PACKAGES, CHANNEL PEAR.PHP.NET:

=========================================

PACKAGE          VERSION STATE

Archive_Tar      1.3.2   stable

Archive_Zip      0.1.1   beta

……

开始我们的测试:

测试文件夹下原有文件及文件夹:

./to_zip/config.inc.php (文件)

./to_zip/readme.txt     (文件)

./to_zip/styles.css     (文件)

./to_zip/why100000.gif  (文件)

./create.php            (文件)

./unpackaged            (文件夹)

./unpackaged_all        (文件夹)

(1)创建 zip 压缩文件示例代码:

生成了包含4个文件的 zip 压缩包 new_zip.zip。生成的压缩包带 to_zip 路径,保持原目录结构。

include (’Archive/Zip.php’);

$obj = new Archive_Zip(’new_zip.zip’);

$files = array(  //生成的包带 to_zip 路径

‘to_zip/config.inc.php’,

‘to_zip/readme.txt’,

‘to_zip/styles.css’,

‘create.php’

);

if ($obj->create($files))

{

echo ‘Created successfully!’;

}

else

{

echo ‘Error in file creation’;

}

?>

(2)向压缩包里添加一个新文件:

include (’Archive/zip.php’);

if (file_exists(’new_zip.zip’))

{

$obj = new Archive_zip(’new_zip.zip’);

}

else

{

die(’File does not exist.’);

}

$files = array( // additional files

‘to_zip/why100000.gif’

);

if ($obj->add($files))

{

echo ‘Added successfully!’;

}

else

{

echo ‘Error in file addition’;

}

?>

(3)列出压缩包里的文件信息:

include (’Archive/zip.php’);// import class

$obj = new Archive_zip(’new_zip.zip’); // name of archive

$files = $obj->listContent(); // array of file information

foreach ($files as $f)

{

foreach ($f as $k => $v)

{

echo “$k: $v
”;

}

echo “
”;

}

?>

(4)删除压缩包里的文件:

通过正则表达式匹配,可以删除全部或部分文件。

include (’Archive/Zip.php’);

if (file_exists(’new_zip.zip’))

{

$obj = new Archive_Zip(’new_zip.zip’); // name of zip file

}

else

{

die(’File does not exist’);

}

$files = array(’to_zip/why100000.gif’);   // files to delete

if ($obj->delete(array(’by_name’ => $files))) //’by_preg’ => “/.*doc$/” 删除 doc 文档

{

echo ‘Deleted successfully!’;

}

else

{

echo ‘Error in file deletion’;

}

?>

(5)从压缩包里解出文件:

解开后带原文件路径结构,unpackaged 文件夹必须事先存在。

include (’Archive/zip.php’);

if (file_exists(’new_zip.zip’))

{

$obj = new Archive_zip(’new_zip.zip’); // name of zip file

}

else

{

die(’File does not exist’);

}

$files = array(  //files to extract,解出文件 to_zip/why100000.gif

‘to_zip/why100000.gif’,

);

if ($obj->extract(array(’by_name’ => $files, ‘add_path’ => ‘unpackaged/’)))

{

echo ‘Extracted successfully!’;

}

else

{

echo ‘Error in file extraction’;

}

?>

(6)从压缩包里解出全部文件:

和(5)其实是一回事,应用了正则表达式使全部文件被解包出来。(操作 Tar 文件,解除部分文件和全部文件,方法是不同的。)

include (’Archive/zip.php’);

if (file_exists(’new_zip.zip’))

{

$obj = new Archive_zip(’new_zip.zip’); // name of zip file

}

else

{

die(’File does not exist’);

}

if ($obj->extract(array(’by_preg’ => ‘/.*/’, ‘add_path’ => ‘unpackaged_all/’))) //解开后带路径,unpackaged 必须事先存在

{

echo ‘Extracted successfully!’;

}

else

{

echo ‘Error in file extraction’;

}

?>

从 ZIP 压缩包里删除、解压文件,和 Tar 包的方法是不同的。网上有些教程全部照搬了 Tar 的方法来解释 ZIP 文件的操作(连文章的文字都是克隆过来的,几乎就是把“Tar”换成了“Zip”)。而由于这2种文件的解压的方法不同,所以 ZIP 的操作就没有解释解压的方法,在网上搜索,相关的文章就都没有 ZIP 解压缩的方法。看来没有几个人在潜心研究,照抄的人倒不少!

后记:Zip.php 文件里包含了操作 zip 文件的类,包含了操作 zip 文件的算法,有兴趣的可以去研究。这可是最核心的东西,真正的精华其实是在这里。类似一些教程 - 包括您正在看的这篇,都是皮毛。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值