【未解決】PHPのDirectoryIterator::isDotの理解できない挙動についてのメモ
Windows10 HOMEのPCでPHPのDirectoryIteratorでディレクトリの中のファイルやディレクトリを列挙するコードを書いていた時、理解できない現象に遭遇したことについてメモしておく。
'.'や'..'は表示して欲しくないので、最初はisDotで判定しようとした。
<?php if ( isset($_GET['dir']) ){ $dir = $_GET['dir']; } else { $dir = './'; } $this_page = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://').$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME']; $iterator = new DirectoryIterator($dir); foreach($iterator as $file){ if ($file->isFile()){ $pathname = $file->getPathname(); print "<li><a href='{$pathname}'>{$pathname}</a></li>"; } } foreach($iterator as $file){ if ($file->isDir()) { $pathname = $file->getPathname(); $sub1 = substr($pathname,-2); $sub2 = substr($pathname,-3); // if ( !file->isDot() ){ if( $sub1 != '\.' && $sub2 != '\..' ){ print "<li><a href='{$this_page}?dir={$pathname}'>{$pathname}</a></li>"; } } }
ファイルなどは以下の通りだが、なぜか、isDot()を使ったときは'dir11'と'dir12'が表示されなくなってしまう。
ディレクトリ: C:\WebApplication\php\Documents\dir1 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2022/11/08 11:19 dir11 d----- 2022/11/08 11:20 dir12 -a---- 2022/11/08 11:18 26 doca.txt
仕方なく部分文字列で判定するように変更したのだが・・・。
なぜ、'dir11'と'dir12'とはisDotなのだろう?
了