PHP中SplFileInfo对象转数组问题求助
问题解决:获取目录文件的完整信息数组
原代码存在的问题
- 过滤逻辑错误:原代码通过
strpos($file, ".", -1)判断是否跳过文件,会误过滤所有带扩展名的正常文件(如xxx.jpg),且判断方式依赖对象转字符串的隐式转换,不够可靠。 - 存储对象无法直接访问属性:直接将
SplFileInfo对象存入数组,其私有属性无法直接读取,需要通过类的公共方法提取信息。
修改后的代码
<?php function getDirectoryListing($path) { $dir_iterator = new RecursiveDirectoryIterator($path); $iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST); $files = array(); foreach($iterator as $file) { // 正确跳过.和..目录 if($file->isDot()) { continue; } // 通过SplFileInfo的公共方法提取所有需要的信息,存入关联数组 $files[] = array( 'pathname' => $file->getPathname(), 'filename' => $file->getFilename(), 'basename' => $file->getBasename(), 'size' => $file->getSize(), 'last_modified' => $file->getMTime(), 'is_dir' => $file->isDir(), 'is_file' => $file->isFile() // 可根据需求添加更多方法返回的信息,比如getExtension()、getOwner()等 ); } return $files; } $files = getDirectoryListing("I:\cef-inc.net/images/database/"); print_r($files); ?>
关键修改点说明
- 替换过滤逻辑:使用
SplFileInfo::isDot()方法精准判断当前项是否为.或..,避免误过滤正常文件。 - 提取对象信息:不再直接存储
SplFileInfo对象,而是通过其提供的公共方法(如getPathname()、getFilename()等)提取所需信息,存入关联数组,这样后续遍历数组时可以直接访问这些属性。
内容的提问来源于stack exchange,提问作者CharlesEF
相关产品推荐
相关产品推荐

