|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
也或许是因为我还没有真正的学到深处吧,说实在的,PHP中的很多高级点的应用,如PHP类、PHP函数基本还是不懂吧! 在开辟Web使用法式时,很有能够您会碰到分歧格局的文件――CSV数据、暗码文件、XML编码的内容和分歧模式的二进制的数据。您的PHP剧本将需求频仍地和这些文件交互,从中读取数据和将数据写入个中。因为有这么些格局的文件要处置,所以您就不要不测PHP中有那末多品种型的内置函数和内部的库,用来毗连和利用几近一切您能说知名称的文件格局。
这篇指南就是关于如许一种文件格局的,能够使用法式开辟者几近天天城市碰到这类文件:ZIP格局。普通这类格局是用来经由过程电子邮件和近程毗连传输文件的,可以将多个文件紧缩到一个档案文件中,因而,削减了文件的硬盘占有空间,而且可以更轻易地挪动它们。PHP经由过程它的ZZipLib插件和PEAR的Archive_Zip类都可以读取和创立这些ZIP文件。
我将假定您已有了正常运转的Apache,装置了PHP,而且PEAR Archive_Zip class类已准确装置了。
注重:您可以直接从网上装置PEAR Archive_Zip法式包,要末下载它,还可以使用供应的唆使。
创立ZIP档案文件
让咱们从一个复杂的例子入手下手:静态地创立一个包含几个其他文件的ZIP档案文件。以列表A中的剧本入手下手。
列表A
<?php
include ('Archive/Zip.php'); // imports
$obj = new Archive_Zip('test.zip'); // name of zip file
$files = array('mystuff/ad.gif',
'mystuff/alcon.doc',
'mystuff/alcon.xls'); // files to store
if ($obj->create($files)) {
echo 'Created successfully!';
} else {
echo 'Error in file creation';
}
?>
这个剧本十分复杂,然而值得细心看一下:
起首,第一步是创立一个Archive_Zip类的实例,然后用将要创立的档案文件的途径和称号将其初始化。在这个例子中,档案文件被定名为test.zip,位于以后目次下。
接着,初始化一个数组,列出将要被紧缩的文件,和它们在硬盘中的地位一同保留个中;这些地位用相对或绝对术语列入,然而,一个关头的要思索的事项是剧本对那些文件或磁盘的地位要有读取的权限。
最初,用create()办法经由过程紧缩和兼并指定的文件来实践构建档案文件。这个办法承受文件列表作为输出,然后前往一个布尔逻辑值唆使档案文件是不是被胜利创立。注重剧本在文件被创立的目次下必需有写入特权长短常主要的,不然create()办法将掉败;这是一个广泛的,也让大局部老手掉败的毛病。
如今,在修正了源文件列表和方针文件地位来反应您的当地体系设置装备摆设以后,试着运转下面的剧本。假如一切顺遂的话,Archive_Zip应当可以找到您所列出的、并紧缩到名为test.zip的ZIP档案文件中的文件。
检查ZIP档案文件的内容
那末怎样看到现有的ZIP档案文件中的内容呢?Archive_Zip lets让您经由过程它的listContent()办法也能够做到这一点。上面是一个例子(列表B):
列表B
<?php
include ('Archive/Zip.php'); // imports
$obj = new Archive_Zip('test.zip'); // name of zip file
$files = $obj->listContent(); // array of file information
foreach ($files as $f) {
foreach ($f as $k => $v) {
echo "$k: $v\n";
}
echo "\n";
}
?>
listContent()的输入是一个由数组构成的布局数组,每个数组元素代表档案文件中的一个独自文件。凡是,每个元素中保留有相干的信息,例如对应文件的名字、它的索引地位、形态、巨细(紧缩后和紧缩前的)和比来一次修正的工夫。用一个轮回可以很轻易地将这些信息提掏出来,还可以像列表B那样,重定它的格局,使其更好传输。上面是输入的一个示例(列表C):
列表C
filename: mystuff/alcon.xls
stored_filename: mystuff/alcon.xls
size: 113664
compressed_size: 35902
mtime: 1141996836
comment:
folder:
index: 0
status: ok
向现有的ZIP档案文件中添加新文件
Archive_Zip类的一个成心思的特征就是它可以经由过程add()办法向现有的档案文件中添加新的文件。为了申明这一点,让咱们回到test.zip,测验考试对它添加新文件(列表D):
列表D
<?php
include ('Archive/Zip.php'); // imports
if (file_exists('test.zip')) {
$obj = new Archive_Zip('test.zip'); // name of zip file
} else {
die('File does not exist');
}
$files = array('otherstuff/montecarlo.png'); // additional files to store
if ($obj->add($files)) {
echo 'Added successfully!';
} else {
echo 'Error in file addition';
}
?>
正如您所看到的那样,向一个现有的档案文件中添加新文件的法式和创立一个新的档案文件非常类似:初始化一个新的Archive_Zip对象指向问号代表的档案文件,创立一个数组代表将要添加的文件的列表,然后将这个数组输出add()办法。和create()办法一样,add()前往一个布尔逻辑旌旗灯号来唆使添加是不是胜利。和后面一样,一个次要的成绩就是别忘了要有足够的权限:记得确保剧本有恰当的权限来读取源文件,并将新紧缩的档案文件写回到硬盘中。
从现有的ZIP档案文件中删除文件
和添加文件一样,您也能够删除文件。Archive_Zip类具有delete()办法,让您可以从现有的档案文件中移除文件。列表E申明了这一点。.
列表E
<?php
include ('Archive/Zip.php'); // imports
if (file_exists('test.zip')) {
$obj = new Archive_Zip('test.zip'); // name of zip file
} else {
die('File does not exist');
}
$files = array('mystuff/ad.gif', 'otherstuff/montecarlo.png'); // files to delete
if ($obj->delete(array('by_name' => $files))) {
echo 'Deleted successfully!';
} else {
echo 'Error in file deletion';
}
?>
在这里,创立了一个待删除文件的数组,然后将其输出delete()办法。注重delete()挪用中的特别参数“by_name”:这告知Archive_Zip只删除那些与文件名准确婚配的文件。假如删除胜利,delete()办法前往真。
除这类模式的有选择的删除以外,delete()办法也撑持对与特定类型或正则表达式相婚配文件的大范围的摧毁。使用“by_ereg”或“by_preg”参数,Perl和PHP的正则表达式都撑持。列表F是一个例子,用来讲明如何用这类办法,经由过程使用Perl的正则表达式来删除一个档案文件中一切的*.doc文件。
列表F
<?php
include ('Archive/Zip.php'); // imports
if (file_exists('test.zip')) {
$obj = new Archive_Zip('test.zip'); // name of zip file
} else {
die('File does not exist');
}
if ($obj->delete(array('by_preg' => "/.*doc$/"))) { // all DOC files
echo 'Deleted successfully!';
} else {
echo 'Error in file deletion';
}
?>
如以上的例子所示,PEAR的Archive_Zip类用处良多,只需求几行代码,就使您可以履行一些相当庞杂的与ZIP文件的交互。希望下面的示例剧本可以激起起您的灵感,告知您若何在您的平常开辟举动中利用这个类,并让您对用它停止实验发生乐趣。祝您编程高兴!
请作者接洽本站,实时附注您的姓名。接洽邮箱:edu#chinaz.com(把#改成@)。
小试一下身手,大概是没问题了,那么交给你个任务,做个留言本吧,这和HELLO WORLD有一比啊!^_^,同是新手面临的第一道关。 |
|