더 이상 고민하지 않고 코드를 살펴보겠습니다.
$path = $argv[1]; // 获取目录下所有内容 $dirs = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($dirs as $k=>$d){ echo 'key:'. $k, PHP_EOL; if($d->isDir()){ echo $d->getPathname(), PHP_EOL; }else{ echo $d->getFilename(), PHP_EOL; } } //执行 php PHP获取目录中的全部内容RecursiveDirectoryIterator.php ../ // key:../. // ../. // key:../.. // ../.. // key:../source // ../source // key:../source/. // ../source/. // key:../source/.. // ../source/.. // key:../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php // PHP获取目录中的全部内容RecursiveDirectoryIterator.php // key:../source/PHP大文件读取操作.php // PHP大文件读取操作.php // key:../PHP大文件读取操作.md // PHP大文件读取操作.md // key:../PHP获取目录中的全部内容RecursiveDirectoryIterator.md // PHP获取目录中的全部内容RecursiveDirectoryIterator.md
실제로는 한 줄의 코드일 뿐이며 직접 루프를 실행하여 반복자를 출력합니다. 결과에서 우리는 먼저 소스 디렉터리에 들어간 다음 외부 파일 내용을 순회하여 디렉터리와 파일 이름의 순서로 디렉터리에 있는 모든 콘텐츠를 얻는 것을 볼 수 있습니다. 재귀함수를 직접 작성하는 것보다 훨씬 편리하지 않나요?
디렉토리에 있는 모든 PHP 파일을 가져와서 전체 파일 크기를 계산하려면 어떻게 해야 합니까? 이 반복자 작업 세트를 사용하면 이전 반복자 콘텐츠를 필터링하기 위해 일반 반복자만 추가하면 됩니다.
// 获取所有php文件 $regIts = new RegexIterator($dirs, '/^.+\.php$/i'); $fileSize = 0; foreach($regIts as $k=>$p){ echo $p->getSize() . ' ' . $k, PHP_EOL; $fileSize += $p->getSize(); } echo 'Total ', $fileSize, PHP_EOL; // 622 ../source/PHP获取目录中的全部内容RecursiveDirectoryIterator.php // 869 ../source/PHP大文件读取操作.php // Total 1491
ls -l처럼 느껴지므로 디렉터리에서 관련 작업을 수행할 수 있습니다. . 이 클래스의 사용은 여기에서 간략하게 소개됩니다. SPL 라이브러리에는 우리가 탐색할 가치가 있는 많은 기능이 있습니다. 우아한 프로그래밍 능력을 지속적으로 향상시키기 위해 천천히 배우고 천천히 연습하세요.
테스트 코드:
https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/PHP%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E5%85%A8%E9%83%A8%E5%86%85%E5%AE%B9RecursiveDirectoryIterator.php
추천 학습: php 비디오 튜토리얼