関数を使用して、すべてのディレクトリとサブディレクトリからすべてのファイル名、サイズ、パスを取得したいと考えています。私はすでに再帰関数を使用して同じことをしました。これが私のコードです。
function scan_dir($path, $exclude){
$ite = new RecursiveDirectoryIterator($path);
$bytestotal=0;
$nbfiles=0;
$file_data = array();
$i= 0;
foreach (new RecursiveIteratorIterator($ite,RecursiveIteratorIterator::CHILD_FIRST) as $filename => $cur) {
if ($cur->isDir())
{
continue ;
}
$files = str_replace('\\','/', $filename);
$filesize = $cur->getSize();
$exclude = array_filter($exclude);
$data = array('name'=>$files, 'path'=>$cur->getPath(),'size'=>$cur->getSize());
$file_data[] = $data;
$i++;
$nbfiles++;
$bytestotal += $filesize;
}
$bytestotal = $bytestotal;
return array( 'total_files'=> $nbfiles, 'total_size' => $bytestotal, 'files'=> $file_data);
}
問題は、Linux サーバーでコードを実行すると、再帰関数が原因で実行速度が遅くなることです。同じ出力を得ることができますが、別の機能を使用できるように、同じものを代替することができます。
if else部分を追加したい、つまりサーバーをチェックします。Linuxの場合は{ } else { 再帰関数 } どんな助けも本当にありがたいです。