Klasör Listeleme ile En Güncel Dosyayı Alma

PHP ile klasörün içine bakmak için opendir fonksiyonu kullanılmaktadır. Bu fonksiyona yolu verdiğimizde readdir ile içeriğini okuyabilmekteyiz.

PHP 5 ile gelen scandir fonksiyonu ise yukarıda belirttiğim iki fonksiyonun görevini birlikte ve daha hızlı bir şekilde yapmaktadır.

Aşağıda aynı amaca sahip iki adet klasör içeriğini listeleme fonksiyonu mevcuttur. Burada fonksiyonlara gönderilen lastFile parametresi true olduğu zaman size o klasördeki son güncellenen dosyayı göndermektedir. Fonksiyon kullanımını göstermek amaçlı aşağıda anlatımlı örnekler mevcuttur.

<?php
set_time_limit(0);
function klasorListe( $path = '.', $lastFile = false ){
	$ignore = array('.', '..', 'Thumbs.db' ); // Windows işletim sistemindeki bakılmaması gereken yollar
	
	$dh = @opendir( $path ); // Yolu alıyoruz
	
	$tmpArray = array(); // Klasör ve dosyaları atayacak dizi
	$tmpFile = 0; // Son değiştirilen dosyayı kontrol etmek amaçlı
	
	while( false !== ( $file = readdir( $dh ) ) ){ // İçeriğine bakıyoruz
		if( in_array( $file, $ignore ) ){ // Bakmasını istemediğimiz kısımlar ise es geç diyoruz.
			continue;
		}
		//$spaces = str_repeat( '&nbsp;', ( $level * 4 ) ); 
		if( is_dir( "$path/$file" ) ){ // Klasör ise						
			$tmpArray2 = klasorListe( "$path/$file", $lastFile ); // Tekrar içeriğine bakmak için fonksiyonumuza tekrar yolluyoruz
			
			$tmpArray[] = array( // Aşağıda atanan dosyalar ALT olarak diziye ekleniyor
				'AD' => $file,
				'ALT' => $tmpArray2
			);
			
		} else { // Dosyalar diziye atanıyor			
			
			if ( $lastFile ){
				$tmpStr = filemtime( "$path/$file");
				
				if ( $tmpStr > $tmpFile ){
					$tmpFile = $tmpStr;
					
					$tmpArray = array('AD' => $file);			
				}				
			} else {
				$tmpArray[] = array(
					'AD' => $file
				);			
			}						
		}		
	} 
	
	closedir( $dh );	
	return $tmpArray;
}

function klasorListe2( $path, $lastFile = false ){
	
	
	$ignore = array('.', '..', 'Thumbs.db' ); // Windows işletim sistemindeki bakılmaması gereken yollar
	
	$dh = @scandir( $path ); // Yolu ve içeriği alıyoruz	
	
	$tmpArray = array(); // Klasör ve dosyaları atayacak dizi
	$tmpFile = 0; // Son değiştirilen dosyayı kontrol etmek amaçlı	
	foreach( $dh as $key => $file ){ // İçeriğine bakıyoruz
		if( in_array( $file, $ignore ) ){ // Bakmasını istemediğimiz kısımlar ise es geç diyoruz.
			continue;
		}
		
		if( is_dir( "$path\\$file" ) ){ // Klasör ise									
			$tmpArray2 = klasorListe2( "$path\\$file", $lastFile, $lastDirect ); // Tekrar içeriğine bakmak için fonksiyonumuza tekrar yolluyoruz
			
			$tmpArray[] = array( // Aşağıda atanan dosyalar ALT olarak diziye ekleniyor
				'AD' => $file,
				'TIP' => 'Klasor',
				'YOL' => "$path\\$file",
				'ALT' => $tmpArray2
			);
			
		} else { // Dosyalar diziye atanıyor								
			if ( $lastFile ){				
				return $tmpArray[] = array(
					'AD' => $dh[ count($dh) -1 ],
					'TIP' => 'Dosya',
					'YOL' => "$path\\$file"
				);
			} else {
				$tmpArray[] = array(
					'AD' => $file,
					'TIP' => 'Dosya',
					'YOL' => "$path\\$file"
				);			
			}
		}		
	
	}	
	return $tmpArray;
}

#$return = klasorListe( ".",true ); 
$return = klasorListe2( "." ); 

function klasorListeGoster( $array, $seviye=0 ){	
	if ( is_array($array) ){
		foreach( $array as $key => $value ){		
			echo '<tr class="' . ( $value['TIP'] == 'Klasor' ? 'dir' : 'file' ) . '">
				<td> ' . str_repeat('&nbsp;&nbsp;',$seviye) . ' <a target="_blank" href="'.$value['YOL'].'">'. $value['AD'] .'</a> </td>				
			</tr>';
			if ( isset( $value['ALT'] ) ){
				klasorListeGoster( $value['ALT'], ($seviye+1) );	
			}			
		}
	} else {
		return false;
	}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>PHP ile Klasör Listeleme</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="container">
	<h1>PHP ile Klasör Listeleme</h1>	
	<table class="sortable">
	    <thead>
		<tr>			
			<th>Dosya Adı</th>			
		</tr>
	    </thead>
	    <tbody>
			<?php klasorListeGoster( $return ); ?>		
	    </tbody>
	</table>
</div>
</body>
</html>

Uygulama Örnek Sayfası

PHP ile Klasor Listeleme

Paylaş: