У меня есть php-код для списка всех файлов «.swf» в папке. (Имя файлов всегда: «99-dd-mm-YY_HH-mm-ss.swf», например: «01-19-06-2011_18-40-00.swf». Когда у меня есть более 500 файлов в папке сложно увидеть и обновить страницу.
Мне нужно разбивать список файлов.
<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <title></title> <script type="text/javascript"> function submitform() { document.myform.submit(); } </script> </head> <body> <form name="myform" action="some.php" method="post"> <?php echo "\n<br>\n"; echo "<a href='javascript:this.location.reload();' style='color: #000000; font-weight: normal'>Refresh</a></br>"; echo "<tr>\n<td>\n<a href='javascript:javascript:history.go(-1)'>\n"; echo "<img src='../../inc/img/back.png' alt='Back'"; echo " border=0>\n"; echo "<b> Back</b></a></td>\n"; echo "\n</tr>\n"; echo "\n<br>\n\n<br>\n"; $folder='.'; function order($a,$b){ global $folder; $directory='.'; return strcmp(strtolower($a), strtolower($b)); } $folder=opendir($folder); while($files=readdir($folder)){ $ext = pathinfo($files, PATHINFO_EXTENSION); if ($ext == 'swf') { //con esta línea saco el nombre index.php del listado $file[]=$files; usort($file, "order"); } } $n = 0; foreach($file as $archiv){ $n = $n + 1; $day = substr($archiv, 3,10); $day = str_replace("-","/", $day); $hour = substr($archiv, 14,8); $hour = str_replace("-",":", $hour); echo "<img alt='Ver $archiv' src='../../inc/img/video.png'> Video $n, Día: $day, hour: $hour\n "; echo "<input type='submit' name='xxx' value='$archiv'></td>\n"; echo "\n</tr>\n"; echo "<br>"; } closedir($folder); echo "\n<br>\n"; echo "<tr>\n<td>\n<a href='javascript:javascript:history.go(-1)'>\n"; echo "<img src='../../inc/img/back.png' alt='Back'"; echo " border=0>\n"; echo "<b> Back</b></a></td>\n"; echo "\n</tr>\n"; ?> </form> </body> </html>
Когда требуется пройти через множество папок и файлов, попробуйте объект Iterator. Хороший пример:
function get_files($dir) { $dir = new DirectoryIterator($dir); $list = iterator_to_array($dir, false); return array_slice($list, 2); }
Это позволит получить все имена файлов (если у вас php 5.3 или выше) очень быстро и сделает для вас dir_exists / file_exists! Array_slice, чтобы удалить. и .. каталог.
Я использовал этот код для простой разбивки на страницы
<?php // Include the pagination class include 'pagination.class.php'; // Create the pagination object $pagination = new pagination; // some example data foreach (range(1, 100) as $value) { $products[] = array( 'Product' => 'Product '.$value, 'Price' => rand(100, 1000), ); } // If we have an array with items if (count($products)) { // Parse through the pagination class $productPages = $pagination->generate($products, 20); // If we have items if (count($productPages) != 0) { // Create the page numbers echo $pageNumbers = '<div>'.$pagination->links().'</div>'; // Loop through all the items in the array foreach ($productPages as $productID => $productArray) { // Show the information about the item echo '<p><b>'.$productArray['Product'].'</b> 243'.$productArray['Price'].'</p>'; } // print out the page numbers beneath the results echo $pageNumbers; } } ?>
Здесь есть класс разбиения на страницы и пример загрузки: http://lotsofcode.com/php/php-array-pagination.htm
Спасибо за все!
Как @Tessmore сказал , Сп Итераторы являются awesomesauce . Согласно документам , для основных итераторов вам нужен PHP> 5.1.
Пример перекрестной публикации –
DirectoryIterator
и LimitIterator
– мои новые лучшие друзья, хотя glob
похоже, более профильтрует. Вы также можете написать собственный FilterIterator
. Мне нужен PHP> 5.1, я думаю.
Нет предварительной фильтрации:
$dir_iterator = new DirectoryIterator($dir); $paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Glob prefilter:
$dir_glob = $dir . '/*.{jpg,gif,png}'; $dir_iterator = new ArrayObject(glob($dir_glob, GLOB_BRACE)); $dir_iterator = $dir_iterator->getIterator(); $paginated = new LimitIterator($dir_iterator, $page * $perpage, $perpage);
Тогда сделайте свое дело:
foreach ($paginated as $file) { ... }
Обратите внимание, что в случае примера DirectoryIterator
$file
будет экземпляром SplFileInfo
, тогда как пример glob
– это только путь к диску.