PHP网页编程之若何用PHP剧本和PEAR类创立ZIP档案文件...
也或许是因为我还没有真正的学到深处吧,说实在的,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有一比啊!^_^,同是新手面临的第一道关。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。 做为1门年轻的语言,php一直很努力。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 爱上php,他也会爱上你。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 实践是检验自己会不会的真理。 当然这种网站的会员费就几十块钱。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 写的比较杂,因为我也是个新手,不当至于大家多多指正。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 爱上php,他也会爱上你。 基础有没有对学习php没有太大区别,关键是兴趣。
页:
[1]
2