Php glob无限nr的文件

时间:2014-11-15 15:44:04

标签: php sorting time glob scandir

使用php我需要将foto导入到我的页面,我需要从包含超过1000,2000或3000张照片的文件夹中导入它们。

如何确保我的浏览器因为大量文件而立即崩溃? 我将我网站上每页的数量限制为50,但我的PHP仍需要1000或更多的数据,然后按日期对其进行排序。

我已经尝试了glob()函数,但是在此页面中的文件数量太多之后,这不会起作用。

是否有更好的方法按日期对整个文件夹进行排序,然后采用有限的nr文件,如文件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个文件(类似的东西)时,我的浏览器会崩溃,或者加载时间会非常长。 我怎样才能改善这个?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用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;

请注意,上述代码中没有错误处理,当然您应该检查以便成功打开目录等等。