- 浏览: 7929100 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
php中,可以用用DirectoryIterator获取指定目录的文件或者目录.
RecursiveDirectoryIterator 获取目录下所有的文件,包括子目录 ,其中搭配:
RecursiveIteratorIterator使用.
(RecursiveIteratorIterator是个递归迭代器,其后可选带四个参数(只能任一)
RecursiveIteratorIterator::LEAVES_ONLY
默认,已在__construct中设定使用
作用是去枝留叶,跳过空节点,只递归取实值
举例就是
1.递归文件夹取文件时跳过文件夹本身,只取文件夹下面的文件,输出的项全部是file(文件和各级子文件夹的文件)
2.多维数组就跳过前几维的key,而取value,输出的每一项都不是array
3.XML只取值(text),不输出节点名,当然还要视乎你设定获取xml什么内容
RecursiveIteratorIterator::SELF_FIRST
各项都包含,例如递归文件夹就会连同子文件夹名称也作为其中项输出,顺序是先父后子
RecursiveIteratorIterator::CHILD_FIRST
同上,但顺序是先子后父,./test/test.php会在./test(文件夹)前面)
$path = "/tmp/";
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($objects as $object)
{
$tmpFile['link'] = $object->getPath();
$tmpFile['name'] = $object->getFileName();
$tmpFile['type'] = $object->isFile() ? 'file' : 'dir';
$tmpFile['size'] = _cal_size($object->getSize());
$tmpFile['mtime'] = $object->getMTime();
$arrFile[] = $tmpFile;
}
print_r($arrFile);
/*
output:
Array
(
[0] => Array
(
[link] => /tmp
[name] => scim-panel-socket-:0-root
[type] => dir
[size] => 0b
[mtime] => 1222049895
)
[1] => Array
(
[link] => /tmp/.font-unix
[name] => fs7100
[type] => dir
[size] => 0b
[mtime] => 1241417372
)
)
*/
再来看个例子:
<?php
/*** the target directory, no trailling slash ***/
$directory = './';
try
{
/*** check if we have a valid directory ***/
if( !is_dir($directory) )
{
throw new Exception('Directory does not exist!'."\n");
}
/*** check if we have permission to rename the files ***/
if( !is_writable( $directory ))
{
throw new Exception('You do not have renaming permissions!'."\n");
}
/**
*
* @collapse white space
*
* @param string $string
*
* @return string
*
*/
function collapseWhiteSpace($string)
{
return preg_replace('/\s+/', ' ', $string);
}
/**
* @convert file names to nice names
*
* @param string $filename
*
* @return string
*
*/
function safe_names($filename)
{
$filename = collapseWhiteSpace($filename);
$filename = str_replace(' ', '-', $filename);
$filename = preg_replace('/[^a-z0-9-.]/i','',$filename);
return strtolower($filename);
}
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, 0));
/*** loop directly over the object ***/
while($it->valid())
{
/*** check if value is a directory ***/
if(!$it->isDot())
{
if(!is_writable($directory.'/'.$it->getSubPathName()))
{
echo 'Permission Denied: '.$directory.'/'.$it->getSubPathName()."\n";
}
else
{
/*** the old file name ***/
$old_file = $directory.'/'.$it->getSubPathName();
/*** the new file name ***/
$new_file = $directory.'/'.$it->getSubPath().'/'.safe_names($it->current());
/*** rename the file ***/
rename ($old_file, $new_file);
/*** a little message to say file is converted ***/
echo 'Renamed '. $directory.'/'.$it->getSubPathName() ."\n";
}
}
/*** move to the next iteration ***/
$it->next();
}
/*** when we are all done let the user know ***/
echo 'Renaming of files complete'."\n";
}
catch(Exception $e)
{
echo $e->getMessage()."\n";
}
?>
$path = "/tmp"; $oDir = new DirectoryIterator($path); foreach($oDir as $file) { if($file->isfile()) { $tmpFile['link'] = $file->getPath(); $tmpFile['name'] = $file->getFileName(); $tmpFile['type'] = 'file'; $tmpFile['size'] = _cal_size($file->getSize()); $tmpFile['mtime'] = $file->getMTime(); $arrFile[] = $tmpFile; } } print_r($arrFile); /* output Array ( [0] => Array ( [link] => /tmp [name] => scim-panel-socket-:0-root [type] => dir [size] => 0b [mtime] => 1222049895 ) [1] => Array ( [link] => /tmp [name] => .font-unix [type] => dir [size] => 4k [mtime] => 1241417372 ) ) */
RecursiveDirectoryIterator 获取目录下所有的文件,包括子目录 ,其中搭配:
RecursiveIteratorIterator使用.
(RecursiveIteratorIterator是个递归迭代器,其后可选带四个参数(只能任一)
RecursiveIteratorIterator::LEAVES_ONLY
默认,已在__construct中设定使用
作用是去枝留叶,跳过空节点,只递归取实值
举例就是
1.递归文件夹取文件时跳过文件夹本身,只取文件夹下面的文件,输出的项全部是file(文件和各级子文件夹的文件)
2.多维数组就跳过前几维的key,而取value,输出的每一项都不是array
3.XML只取值(text),不输出节点名,当然还要视乎你设定获取xml什么内容
RecursiveIteratorIterator::SELF_FIRST
各项都包含,例如递归文件夹就会连同子文件夹名称也作为其中项输出,顺序是先父后子
RecursiveIteratorIterator::CHILD_FIRST
同上,但顺序是先子后父,./test/test.php会在./test(文件夹)前面)
$path = "/tmp/";
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
foreach($objects as $object)
{
$tmpFile['link'] = $object->getPath();
$tmpFile['name'] = $object->getFileName();
$tmpFile['type'] = $object->isFile() ? 'file' : 'dir';
$tmpFile['size'] = _cal_size($object->getSize());
$tmpFile['mtime'] = $object->getMTime();
$arrFile[] = $tmpFile;
}
print_r($arrFile);
/*
output:
Array
(
[0] => Array
(
[link] => /tmp
[name] => scim-panel-socket-:0-root
[type] => dir
[size] => 0b
[mtime] => 1222049895
)
[1] => Array
(
[link] => /tmp/.font-unix
[name] => fs7100
[type] => dir
[size] => 0b
[mtime] => 1241417372
)
)
*/
再来看个例子:
<?php
/*** the target directory, no trailling slash ***/
$directory = './';
try
{
/*** check if we have a valid directory ***/
if( !is_dir($directory) )
{
throw new Exception('Directory does not exist!'."\n");
}
/*** check if we have permission to rename the files ***/
if( !is_writable( $directory ))
{
throw new Exception('You do not have renaming permissions!'."\n");
}
/**
*
* @collapse white space
*
* @param string $string
*
* @return string
*
*/
function collapseWhiteSpace($string)
{
return preg_replace('/\s+/', ' ', $string);
}
/**
* @convert file names to nice names
*
* @param string $filename
*
* @return string
*
*/
function safe_names($filename)
{
$filename = collapseWhiteSpace($filename);
$filename = str_replace(' ', '-', $filename);
$filename = preg_replace('/[^a-z0-9-.]/i','',$filename);
return strtolower($filename);
}
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, 0));
/*** loop directly over the object ***/
while($it->valid())
{
/*** check if value is a directory ***/
if(!$it->isDot())
{
if(!is_writable($directory.'/'.$it->getSubPathName()))
{
echo 'Permission Denied: '.$directory.'/'.$it->getSubPathName()."\n";
}
else
{
/*** the old file name ***/
$old_file = $directory.'/'.$it->getSubPathName();
/*** the new file name ***/
$new_file = $directory.'/'.$it->getSubPath().'/'.safe_names($it->current());
/*** rename the file ***/
rename ($old_file, $new_file);
/*** a little message to say file is converted ***/
echo 'Renamed '. $directory.'/'.$it->getSubPathName() ."\n";
}
}
/*** move to the next iteration ***/
$it->next();
}
/*** when we are all done let the user know ***/
echo 'Renaming of files complete'."\n";
}
catch(Exception $e)
{
echo $e->getMessage()."\n";
}
?>
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1927http://www.phpzag.com/11-useful ... -
uccenter中找回创始人密码
2013-03-11 19:12 1912偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2964今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1466$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2086php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19331 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2880介绍几个PHP的开源不错的图片类库 1 pchart ... -
php中__sleep和__wakeup
2012-06-22 09:39 4518在php中,__sleep和___wakeup是两个分别自 ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1673原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1840经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4581在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5047PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7148在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3965在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1820php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2312今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4225cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 52251 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1959在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ... -
php中使用curl发送JSON数据
2011-11-28 13:43 11774在PHP中,可以使用curl去发送JSON数据,例子如下: ...
相关推荐
这一知识点主要涉及PHP中的DirectoryIterator类,这是一个迭代器类,它用于读取目录中的文件和子目录。DirectoryIterator类提供的方法允许程序员遍历指定目录下的所有文件和文件夹,并对它们进行操作。在这个过程中...
`DirectoryIterator`是PHP内建的一个类,用于遍历指定目录中的文件和子目录。本文将详细介绍如何使用`DirectoryIterator`来实现这一功能。 `DirectoryIterator`是PHP的 SPL(Standard PHP Library)的一部分,SPL...
遍历文件通常采用递归方式,通过PHP的DirectoryIterator或RecursiveDirectoryIterator类来实现。这些类可以帮助我们访问指定目录下的所有文件和子目录,进而对每个文件执行相应的操作。在给定的描述中,提到了一个...
1. **DirectoryIterator**: 用于遍历目录中的文件和子目录。 2. **FilesystemIterator**: 扩展了 DirectoryIterator,增加了更多的文件属性检查选项。 3. ** RecursiveDirectoryIterator**: 可以递归地遍历整个目录...
6. SPL(Standard PHP Library):这是一个内置的PHP库,包含多种数据结构和迭代器,如ArrayIterator、DirectoryIterator等,丰富了PHP的编程能力。 三、集成Web服务器 在Win32环境下,PHP可以与IIS或Apache等Web...
- SPL(Standard PHP Library):这是PHP的标准扩展库,包含各种数据结构和迭代器,如ArrayIterator、DirectoryIterator等,5.2.10版进一步丰富了SPL的功能。 2. PHP与Discuz!的结合: Discuz!是一款基于PHP和...
4. **SPL(Standard PHP Library)**:PHP 5.2引入了标准PHP库,包含了各种有用的接口、类和迭代器,如ArrayIterator、DirectoryIterator等,帮助开发者更方便地操作数组和文件系统。 5. **SimpleXML**:这是PHP...
在PHP编程中,类是构建复杂程序结构的基础,它们封装了数据和操作这些数据的方法,使得代码更加模块化和易于管理。"28个PHP常用类"可能包含了多个常见的、实用的类,这些类通常被广泛应用于各种PHP项目中,以解决...
在PHP编程中,类是构建复杂应用程序的基础,它允许我们定义自定义的数据类型,并封装相关的数据和功能。这里提到的“PHP常用类”通常是指在日常开发中经常使用的、能够提高代码复用性和效率的类库。这些类库涵盖了...
在PHP中,我们可以使用`scandir()`函数或者`DirectoryIterator`类来获取目录流,即读取目录中的所有文件和子目录。`scandir()`函数简单易用,它返回一个包含目录中所有文件和子目录的数组。而`DirectoryIterator`则...
- `DirectoryIterator`类:迭代目录中的文件。 - `FilesystemIterator`类:更通用的文件系统迭代器。 6. **HTTP请求与响应**: - `HttpRequest`类:可以用来发送HTTP请求并获取响应,例如通过cURL库实现。 - `...
在PHP编程中,类(Class)是面向对象编程的基础,它定义了一组特性和行为,这些特性通过属性(Properties)来表示,而行为则通过方法(Methods)来实现。"php常用的class类"这个主题涵盖了PHP开发中经常使用的30个类...
SPL提供了多种迭代器用于遍历文件系统,如`DirectoryIterator`, `FilesystemIterator`, ` RecursiveDirectoryIterator`等,它们允许开发者遍历目录、过滤文件类型,甚至递归遍历子目录。 ### 7. 面向对象设计模式 ...
在PHP5中,引入了多个内置的迭代器类,如ArrayIterator、CachingIterator、LimitIterator、RecursiveIterator、SimpleXMLIterator和DirectoryIterator,它们极大地简化了处理XML文档、文件系统等复杂结构的工作。...
1. **文件和目录操作**:首先,你需要熟悉PHP中的`scandir()`、`glob()`或`DirectoryIterator`类等函数或类,它们用于读取和遍历文件系统中的目录和文件。 2. **递归函数**:为了构建树形结构,我们需要编写一个...
RecursiveDirectoryIterator类继承自DirectoryIterator类,它提供了getChildren()方法,这个方法返回当前目录下的所有子目录和文件。而RecursiveIteratorIterator类用于遍历迭代器的递归迭代器。 通过实例代码中的...
本篇文章着重介绍SPL标准库中用于遍历目录和查找固定条件文件的方法,即RecursiveDirectoryIterator类和FilterIterator类的使用。 RecursiveDirectoryIterator类提供了一种方式,可以递归遍历文件系统中的目录和子...