#まえがき
ファイル一覧をサブフォルダ内からもまとめて取得するサンプルメモ。
RecursiveIteratorIterator
RecusiveDirectoryIterator
を使えば自前で再帰処理作らないでいいから楽
#サンプル
ファイルのみ取得
main.php
<?php
$serch_dir = dirname(__FILE__) .'/files';
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($serch_dir,
FilesystemIterator::CURRENT_AS_FILEINFO |
FilesystemIterator::KEY_AS_PATHNAME |
FilesystemIterator::SKIP_DOTS
)
);
foreach($files as $file_path => $file_info) {
if (!$file_info->isFile()) {
continue;
}
echo 'file path : '. $file_path .PHP_EOL;
echo 'file size : '. $file_info->getSize() .PHP_EOL;
echo 'contents : '. file_get_contents($file_path) .PHP_EOL;
echo PHP_EOL;
}
フォルダも取得する
main.php
<?php
$serch_dir = dirname(__FILE__) .'/files';
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($serch_dir,
FilesystemIterator::CURRENT_AS_FILEINFO |
FilesystemIterator::KEY_AS_PATHNAME |
FilesystemIterator::SKIP_DOTS
),
RecursiveIteratorIterator::SELF_FIRST
);
foreach($files as $path => $info) {
echo 'file path : '. $path .PHP_EOL;
echo 'file size : '. $info->getSize() .PHP_EOL;
if ($info->isFile()) {
echo 'contents : '. file_get_contents($path) .PHP_EOL;
} else {
echo 'contents : not file!' .PHP_EOL;
}
echo PHP_EOL;
}
ファイル名でフィルター
main.php
<?php
$serch_dir = dirname(__FILE__) .'/files';
$files = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($serch_dir,
FilesystemIterator::CURRENT_AS_FILEINFO |
FilesystemIterator::KEY_AS_PATHNAME |
FilesystemIterator::SKIP_DOTS
)
);
// 拡張子がtxtのファイルのみ抽出
$files = new RegexIterator($files, '/^.+\.txt$/i', RecursiveRegexIterator::MATCH);
foreach($files as $file_path => $file_info) {
echo 'file path : '. $file_path .PHP_EOL;
echo 'file size : '. $file_info->getSize() .PHP_EOL;
echo 'contents : '. file_get_contents($file_path) .PHP_EOL;
echo PHP_EOL;
}