2014-11-15 1 views
1

PHP가 있어야합니다. foto를 내 페이지로 가져와야하며 1000, 2000 또는 3000 개 이상의 사진이 들어있는 폴더에서 가져와야합니다.PHP 글로브 파일 수 제한이 없습니다.

방대한 양의 파일 때문에 브라우저가 즉시 중단되지 않도록하려면 어떻게해야합니까? 내 사이트의 페이지 당 금액을 50으로 제한했지만 여전히 PHP가 배열에 1000 이상을 소요 한 다음 날짜별로 정렬합니다.

glob() 함수를 사용해 보았지만이 페이지 안에있는 파일의 양이 너무 많으면 작동하지 않습니다.

전체 폴더를 날짜별로 정렬 한 다음 파일 50 ~ 100 또는 파일 200 ~ 250 등의 제한된 NR을 취하는 더 좋은 방법이 있습니까?

$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 개가 넘는 파일 (이와 비슷한 것)을 사용하면 브라우저가 다운되거나로드 시간이 길어집니다. 어떻게 개선 할 수 있습니까?

+0

'.jpg'과'.JPG' 파일을 검색 할 때'glob()'를 한 번만 호출하면됩니다 : glob ('../fotos/ *. [jJ] [pP] [ gG] ');' – Cyclonecode

+0

Oke thx : D, 솔루션을 알고 계시나요? – Mart

+0

이 경우 glob 대신에'readdir()'을 사용하려고 할 수 있다고 생각합니다. http://php.net/manual/en/function.readdir.php – Cyclonecode

답변

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; 

공지 사항을 위의 코드에서 처리 오류가 없는지, 물론 당신이 확인해야하므로 디렉토리 성공적 등 열립니다.

+0

오케, 왜 우리를 사용하지 않니? 최신 사진부터 오래된 사진 순으로 정렬해야합니다 – Mart

+0

@MartHaarman - 죄송합니다. 내 답변이 업데이트됩니다. – Cyclonecode

+1

도움을 주셔서 감사합니다. 그래서 알려 주셨고 사진 수는 쉽게 10.000에 도달 할 수 있습니다. 현재 6039와 함께 귀하의 솔루션을 시도하고 내 옛 기능에 비해 매력처럼 일했습니다. – Mart