Помогите со считыванием определённого кол-ва файлов в определенной последовательности

Burgor

Новичок
Помогите со считыванием определённого кол-ва файлов в определенной последовательности

Помогите со считыванием файлов в определенной последовательности.
Я хочу сделать так чтоб из указанной дирректории выводились последние скажем 3 файла по дате, но пока это не выходит помогите пожалуста!
Я сделал вывод всего каталога, а как сделать ввод последних 3х файлов не знаю, подскажите!
PHP:
<?php
chdir("test");
$ndir = opendir('.');
while($e=readdir($ndir))
	{
	if($e !== "." && $e !== "..") 
		{
		echo "<br>".$e;
		$fr=join(' ',file("http://127.0.0.1/news/"."$e"));
		echo "&nbsp;--&nbsp;".$fr."<br>";
		}
	}
closedir($ndir); 
?>
 

netdog

net @
Я хочу сделать так чтоб из указанной дирректории выводились последние скажем 3 файла по дате, но пока это не выходит помогите пожалуста!
Я сделал вывод всего каталога, а как сделать ввод последних 3х файлов не знаю, подскажите!
[m]filemtime[/m]

join(' ',file("http://127.0.0.1/news/"."$e"));
зачем мучить такими конструкциями php и сервак?
[m]file_get_contents[/m]
[m]readfile[/m]
[m]fopen[/m] + [m]fread[/m]
 

alpine

Новичок
Re: Помогите со считыванием определённого кол-ва файлов в определенной последовательности

Автор оригинала: Burgor
Помогите со считыванием файлов в определенной последовательности.
Я хочу сделать так чтоб из указанной дирректории выводились последние скажем 3 файла по дате, но пока это не выходит помогите пожалуста!
Я сделал вывод всего каталога, а как сделать ввод последних 3х файлов не знаю, подскажите!
PHP:
<?php
$sSomeDir = '/tmp';
exec('ls -S1 '.$sSomeDir.' | head -n 3', $aResourses);

echo '<pre>';
print_r($sResourses);
echo '</pre>';
?>
-~{}~ 18.07.05 23:00:

* Это при условии что у тебя в указаной папке только файлы если там есть еще и поддиректории то нужно проверять $aResourses[$i].
** Использование функции exec() должно быть разрешено.
 

Burgor

Новичок
re: Net Dog
Спасибо!
Я тока учусь, а это прочел в книжке и посчитал что будет верно!

re: alpine
Спасибо! Но к сожалению я даже не смогу посмотреть как это работает, так как не имею у себя линов к сожалению, да и бесплатного сервера не знаю для тестов.

Всё что делаю тестю на Денвере.
 

alpine

Новичок
Burgor
Ну в винде по такому же принципу можно виндовыми командами.
 

Burgor

Новичок
re: alpine
если не сложно можешь объяснить, как работает "head -n"?
 

netdog

net @
дополню к своему посту.

сначала считай все файлы в массив.
например $array_files[] = array($filename,filemtime($filename));


потом сортируешь этот массив по второму индексу и выводишь первые/последние 3 записи, в зависимости как отсортировал.

или $array_files[$filename] = filemtime($filename)
тебе будет с сортировкой такого массива проще

-~{}~ 18.07.05 23:08:

если не сложно можешь объяснить, как работает "head -n"?
выводит первые -n строчек сверху из stdin
 

Burgor

Новичок
re: Net Dog
re: alpine
Огромное спасибо народ!

-~{}~ 19.07.05 20:26:

что то я где то напутал, посмотрите может подскажете
PHP:
<?php
chdir("test");
$ndir = opendir('.');
while($e=readdir($ndir))
	{
	if($e !== "." && $e !== "..") 
		{
			$arr=array($e,filemtime($e));
			arsort($arr);
			$b=array_slice($arr,1,3);
			
			for($i = 0; $i<count($b); $i++)
					{	
					print "$i=$b[$i]<br>";
					}
			}
	}
closedir($ndir); 
?>
 

netdog

net @
PHP:
<?php
chdir("temp");
$ndir = opendir('.');
$arr = array();
while($e=readdir($ndir))
{
	if(is_file($e) && $e !== "." && $e !== "..")
	{
		/* 
		для ф-ии arsort массив должен быть такого вида
		*/
		$arr[$e] = filemtime($e);
	}
}
closedir($ndir);
/*
и сортировать массив нужно не в теле цикла, 
а после того как ты загонишь туда все файлы. Также как и выводу в цикле while делать нечего.
*/
arsort($arr);

$cnt = count($arr);
$num = 0;
foreach ($arr as $file => $timestam) {
	echo  date("r",$timestam)." ".$file ."<br> \r\n";

	if (++$num>2) break;
}

?>
-~{}~ 19.07.05 22:19:

вопросы?
 

Burgor

Новичок
Огромное спасибо!
Вопросы:
- Массив надо сразу объявлять, я правильно понял?
-для чего ты объявил $cnt если онa далее не используется?
-если не сложно мог бы ты прокаментировать (++$num>2)?
 

netdog

net @
- Массив надо сразу объявлять, я правильно понял?
Желательно, или php будет при первом обьявлении ругаться нотайсом
-для чего ты объявил $cnt если онa далее не используется?
забыл снести ;-) ... после того как снес for

-если не сложно мог бы ты прокаментировать (++$num>2)?
Это чтобы вывдило первых 3 записи.
++num при каждом проходе цикла увеличевается на еденицу, когда $num > 2 тобишь == 3,
break; прерывает цикл
 
Сверху