All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
系统安全之Apache服务器实现用户验证_php资料_编程技术
ASP.NET技巧:URL编码处理_[Asp.Net教程]
ASP.Net防止刷新自动触发事件的解决方案_[Asp.Net教程]
PHP数组的定义、初始化和数组元素的显示_php资料_编程技术
PHP动态网站制作中关于文件操作的疑难问答_php资料_编程技术
用于自动添加Digg,This!按钮的javascript_JavaScript技术_编程技术
LINQ体验(1)——Visual,Studio,2008新特性_[Asp.Net教程]
用PHP自动把纯文本转换成Web页面_[PHP教程]
实现GridView行背景色交替、点击行变色(javascript-css)_[Asp.Net教程]
PHP脚本的8个技巧(7)PHP和Java_php资料_编程技术
Reading number is top 10 pictures
Female model behind the bitterness, often being overcharged4
全身蕾丝丝质美臀
So beauty, will let you spray blood3
Sora aoi on twitter1
采访谢楠
中国女孩大胆自拍,显露完美身材
什么叫国家
From China fortress sora aoi5
mythology hero1
The real super beauty14
Download software ranking
塘西风月痕
小黑猫大战两米大花蛇
徐若瑄成名作“魔鬼天使”
asp.net技术内幕
变速齿轮3.26
Popkart Cracked versions Mobile phone games
豪门浪荡史
超级战舰
Take off clothes to survival
艳兽都市
归海一刀 published in(发表于) 2014/2/17 7:45:34 Edit(编辑)
用PHP5的DirectoryIterators递归扫描目录_[PHP教程]

用PHP5的DirectoryIterators递归扫描目录_[PHP教程]

用PHP5的DirectoryIterators递归扫描目录_[PHP教程]

PHP5中增加了Iterator,一组有助于导航和处理等级数据结构的现成接口,这是PHP5最有趣的新特性之一。


这些Iterator显著减少了处理XML文档树或文件集合所需的代码。PHP5中使用大量Iterator,包括ArrayIterator、 CachingIterator、LimitIterator、RecursiveIterator、SimpleXMLIterator和 DirectoryIterator。


通过DirectoryIterator可以迅速有效地对目录中的文件进行处理。在编码过程中稍微增加一些创造力,DirectoryIterator还可用于递归处理嵌套式目录树。这两个任务只需使用几行代码就可以完成,比“标准”处理方法有了显著提高。


处理单级目录


首先我们从简单的任务着手:处理一个单级目录。输入(或复制)以下代码(列表A),修改目录路径以反映当地配置:


列表A


it = new DirectoryIterator("/tmp/mystuff");

foreach(it as file) {

if (!it->isDot()) {

echo file . "n";

}

}

?>

在浏览器中查看这段代码的输出结果,你会在指定目录中看到一个文件列表。这一切是如何发生的呢?DirectoryIterator提供一个预先确 定的接口来重述一个目录的内容;示例目标目录的位置后,就可以把它当作一个标准的PHP数组来处理,每个元素代表目录中的一个文件。注意它使用isDot ()方法分别过滤掉“.”和“..”目录。


处理嵌套式目录树


递归处理一个嵌套式目录树几乎同样简单。在这种情况下,DirectoryIterator需要检查它在单级目录中遇到的每一个对象,确定其是一个文件还是目录。如果是一个目录,就更深入一级检验下一级的内容。这听起来似乎相当复杂,在过去一般都需要15行以上的代码。


但是,使用PHP5,你只需要两个新的Iterator:RecursiveIterator和RecursiveIteratorIterator,它们组合了所有上述功能。见列表B:


列表B


it = new RecursiveDirectoryIterator("/tmp");

foreach(new RecursiveIteratorIterator(it) as file) {

echo file . "n";

}

?>


这时,输入结果将列出起始目录下的所有文件和目录。不必说,如果需要处理某个特定目录级下的所有文件——例如,递归压缩一个目录树;或修改一系列嵌套文件的组/所有者许可时——使用这种递归内置接口就非常方便。


现实应用:打印一个目录树


打印图形目录树是目录递归的一个常见应用。利用Iterator处理这个任务十分简单,因为Iterator类文档中包含一个专门为这个应用而编写 的实例类。DirectoryTreeIterator(感谢Marcus Boerger)为前面讨论的RecursiveIteratorIterator提供了其它改进,特别是在树结构中代表深度和位置的ASCII标记。


列表C说明了DirectoryTreeIterator的用法。


列表C


it = new DirectoryTreeIterator("/tmp/cookbook/");

foreach(it as path) {

echo path . "n";

}

?>


以下是你看到的一部分输出结果:

|-ch01

| |-recipe01

| | |-example01.php

| | -example02.php

| |-recipe02

| | |-example01.php

| | -example02.php

| |-recipe03

| | -example01.php

...


为更好了解这些DirectoryIterator的价值,尝试用标准的文件和目录函数对本教程中说明的三个应用编码。







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.