Файл opendir для сортировки PHP включает

Я пытаюсь отсортировать список opendir(), чтобы он мог отображать информацию в том порядке, в котором я его назвал.

Каждый файл в каталоге называется 1_something.php, 2_something.php, 3_something.php и т. д. Эти файлы представляют собой небольшие фрагменты шаблонного html, который я изменяю на то, что мне нужно.

Я использую код ниже, чтобы вытащить и показать эти файлы:

$dir = "./portfolio"; 
if($handle = opendir($dir)) { 
    while($file = readdir($handle)) { 
        clearstatcache(); 
        if(is_file($dir.'/'.$file)) {
            include("portfolio/".$file);
        }
    } 
closedir($handle); 
} 

Я играл с созданием массива имен и их сортировкой, хотя, наверное, я точно не знаю, где происходит массив, где происходит сортировка и где происходит фактическое отображение информации.

Заранее спасибо.


person ntgCleaner    schedule 08.06.2012    source источник
comment
Ваш clearstatcache() может быть за пределами вашего цикла, кстати :)   -  person Ja͢ck    schedule 08.06.2012
comment
Спасибо, Джек, я думаю, лучше позвонить только один раз, когда это необходимо, а?   -  person ntgCleaner    schedule 08.06.2012


Ответы (2)


Хм, что мешает вам использовать scandir?

http://sg.php.net/manual/en/function.scandir.php

$files = scandir($dir); // returns array of files, sorted alphabetically
foreach($files as $file) {
   // your code
}
person Andreas Wong    schedule 08.06.2012
comment
Это отчасти работает, хотя я получаю такие ошибки, как Предупреждение: include() [function.include]: Не удалось открыть портфолио/.. для включения (include_path='.:/usr/lib/php5'), он ищет для файла с именем портфолио/.. Я попробую добавить, если это файл, завтра утром - person ntgCleaner; 08.06.2012
comment
Хорошо, я быстро создал оператор if, теперь код выглядит так $dir = "./portfolio"; $files = scandir($dir); // returns array of files, sorted alphabetically foreach($files as $file) { if($file !== "." && $file !== ".."){ include("portfolio/".$file); } } Что вы думаете? Это вообще проблема? - person ntgCleaner; 08.06.2012
comment
@ntgCleaner Мне кажется, все в порядке :) - person Andreas Wong; 08.06.2012
comment
scandir должен потреблять больше ресурсов, чем opendir. - person user487772; 20.09.2014

Кредит принадлежит @SiGanteng.

Мне просто нужно было добавить еще одну строку, чтобы убедиться, что он просматривает только настоящие файлы: Код ниже

$dir = "./portfolio"; 
$files = scandir($dir); // returns array of files, sorted alphabetically

foreach($files as $file) {
    if(is_file($dir.'/'.$file)) {
        include("portfolio/".$file);
    }
}

Это самый простой способ вернуть результаты в порядке возрастания.
Еще раз спасибо, SiGanteng.

person ntgCleaner    schedule 08.06.2012