ディレクトリを開いて、その中のすべてのファイルを読み取り、それらをに入れたいと思いますarray
。これまでのところ、次のようになっています。
$imagesdir = $CFG->dataroot.'/1/themeimages/';
これは私にディレクトリへのパスを与えます、次のステップは何ですか?
opendir
解決策は++を使用することですreaddir
(最初のページから例を引用):closedir
$imagesdir = $CFG->dataroot.'/1/themeimages/';
if ($handle = opendir($imagesdir)) {
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
echo "$file\n";
}
}
closedir($handle);
}
別の解決策は、クラスを使用すること[DirectoryIterator
です。] 4ページからの例を引用__construct
:
$imagesdir = $CFG->dataroot.'/1/themeimages/';
$dir = new DirectoryIterator($imagesdir);
foreach ($dir as $fileinfo) {
if (!$fileinfo->isDot()) {
var_dump($fileinfo->getFilename());
}
}
もちろん、いずれの場合も、ファイルの名前をエコーしたりダンプしたりするのではなく、ファイルを配列に配置する必要があります。
これは、ループの前に配列を初期化することを意味します。
$list_files = array();
そして、ループ内で、選択したソリューションに応じて、これら2つの行のいずれかのようなものを使用します。
$list_files[] = $file;
$list_files[] = $fileinfo->getFilename();
組み込み関数scandirを使用するだけです:
ディレクトリからファイルとディレクトリの配列を返します。
したがって、次のように使用します。
$array = scandir($imagesdir);
もちろん、DirectoryIteratorを使用することもできますが、これははるかに簡単です。
ドットファイルを削除することもできます。
$array = array_diff(scandir($imagesdir), array('.', '..'));
あなたのタグリストから、あなたはMoodleを使用していると思いますので、あなたは単に以下を使用することができます:
function get_directory_list($rootdir, $excludefiles='', $descend=true, $getdirs=false, $getfiles=true)
この関数はmoodlelib.phpに含まれています。
ドキュメントから読む:
- 指定されたrootdirを基準にして、*すべてのサブディレクトリ内のすべてのファイル名を含む配列を返します。
オプションのパラメータの詳細については、公式ドキュメントを参照してください。
ファイルの内容を読み取るための関数は、filelib.phpでも使用できます。
よりOOのアプローチについては、DirectoryIteratorクラスを使用してください。
$images = array();
$imagesdir = $CFG->dataroot.'/1/themeimages/';
foreach (new DirectoryIterator($imagesdir) as $file) {
if($file->isDot()) continue;
$images[] = $file;
}
後でフィルターも必要な場合の最短の解決策は次のとおりです。
$imagesdir = $CFG->dataroot.'/1/themeimages/*.*';
foreach (glob($imagesdir) as $file)
array_push($files,$file);
phpは自動的に除外.
します..
上記のように、すべてのファイルが必要ない場合は、独自のマスクを指定することもできます*.*
。phpも自動的に$files
配列を作成します。
最後の行も次のようになります。
$files[]=$file;