Вопрос

Steeply

Skynet
Код:
  if (is_dir($data_path."log")) { 
$dl=opendir($data_path."log"); 
if ($dl) { 
while($name = readdir($dl)) { 
if (!is_dir($name)) { 
if(strpos($name, "private") === FALSE and strcasecmp(trim($name), "to_remove") != 0) 
{ 
$name_to_see = eregi_replace(".log", "", $name); 
$html_to_out .= "<option value=\"$name\">$name_to_see</option>"; 
} 
} 
} 
closedir($dl); 
} 
}


В Винде работает нормально, т.е файлы выводит в таком порядке
2007.01.01
2007.01.02
2007.01.03

А в Линуксе не по-порядку.
2007.01.06
2007.01.03
2007.01.02
2007.01.08
2007.01.04

Подскажите, как поправить?
 

Mike22

Местный
Насколько я знаю, в Win файловая подсистема по умолчанию всегда сама сортирует списки файлов.
Но подобное поведение системы можно и отключить, тогда и в Win вы не получите что хотели.
В Linux ничего не делается "по умолчанию", списки выдаются такими как они есть если явно сортировку не запросить.

Выход - самому (в своём коде) позаботится о сортировке (вводить в массив, сортировать, потом выводить).
Я других решений не вижу.
 

Pestr

Пользователь
Юзай функцию scandir(), если есть PHP 5.

Код:
<?php
$dir	= '/tmp';
$files1 = scandir($dir);
$files2 = scandir($dir, 1);

print_r($files1);
print_r($files2);

/* Результатом будет нечто вроде:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>

А если нет PHP 5, то делай вот так:

Код:
<?php
$dir = "/tmp";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
$files[] = $filename;
}

sort($files);

print_r($files);

rsort($files);

print_r($files);

/* Результат будет примерно таким:
Array
(
[0] => .
[1] => ..
[2] => bar.php
[3] => foo.txt
[4] => somedir
)
Array
(
[0] => somedir
[1] => foo.txt
[2] => bar.php
[3] => ..
[4] => .
)
*/
?>
 
Сверху