с php мне нужно импортировать фото на мою страницу, и мне нужно импортировать их из папки, которая может содержать более 1000, 2000 или 3000 фото.
Как я могу убедиться, что мой браузер не выйдет из строя мгновенно из-за огромного количества файлов?
Я ограничил количество страниц на моем сайте 50, но все же мой php берет 1000 или больше в его массив, а затем сортирует его по дате.
Я пробовал функцию glob (), но она не будет работать, если количество файлов на этой странице слишком велико.
Есть ли лучший способ отсортировать всю папку по дате, а затем взять ограниченный номер, такой как файлы от 50 до 100 или файлы от 200 до 250 и т. Д.?
$files1 = glob('../fotos/*.JPG');
$files2 = glob('../fotos/*.jpg');
$files = array_merge($files1, $files2);
usort($files, function($b,$a){
return filemtime($a) - filemtime($b);
});
$filesPerPage = 50;
$page = $_GET['page']; //FOR INSTANCE: 1 OR 2 OR 5 ETC..
$filesMIN = ($page - 1) * $filesPerPage;
$filesMAX = $page * $filesPerPage;
$fileCount = 0;
foreach($files as $file) {
$fileCount++;
if($fileCount > $filesMIN && $fileCount <= $filesMAX) {
echo '<img src="$file" />';
}
}
Итак, это пример моего кода. Теперь, когда я делаю это с более чем 1000 файлами (что-то вроде этого) в этой папке, мой браузер падает, или время загрузки будет очень долгим.
Как я могу улучшить это?
Вы можете попробовать использовать readdir()
вместо glob()
как это:
// loop through the directory and add all *.jpg && *.JPG files to an array
$filesPerPage = 50;
$page = intval($_GET['page']);
$filesMIN = ($page - 1) * $filesPerPage;
$filesMAX = $page * $filesPerPage;
// set the counter to the offset value
$fileCount = $filesMIN;
$files = array();
$dir = opendir("../photos");
while(false !== ($file = readdir($dir))) {
$ext = pathinfo($file, PATHINFO_EXTENSION);
if(($ext == 'jpg' || $ext == 'JPG') && $fileCount >= $filesMIN && $fileCount < $filesMAX) {
$fileCount++;
$files[] = $file;
}
}
closedir($dir);
// now sort the array
usort($files, function($b,$a){
return filemtime($a) - filemtime($b);
});
// and finally output each image
$output = '';
foreach($files as $file) {
$output .= '<img src="'.$file.'" />';
}
print $output;
Обратите внимание, что в приведенном выше коде нет обработки ошибок, конечно, вы должны проверить, чтобы каталог был успешно открыт и так далее.
Других решений пока нет …