sockets

Best practice: Mit php Verzeichnisse rekursiv auslesen

Verfasst von Jens Reinemuth am 6. Februar 2010 - 13:57

Wenn man schnell und einfach Verzeichnisse mit php rekursiv auslesen möchte, hat sich das Verwenden der folgenden Funktion als die mit Abstand performanteste Lösung herausgestellt.

Momentan benutze ich sie in meiner eigenen kleinen API openWebX um meine Bilderverzeichnisse in Gallerien zu verwandeln. Die Laufzeit für ~140 Verzeichnisse mit insgesamt ~4900 Bildern beträgt knappe 2,2Sekunden auf meinem Developerrechner, inkl. dem Speichern der Infos in die Datenbank.

Vielleicht findet der ein oder andere sie nützlich:

function fileProfileDir( $dir ) {
  static $info = array();
  if( is_dir( $dir = rtrim( $dir, "/\\" ) ) ) {
    foreach( scandir( $dir) as $item ) {
      if( $item != "." && $item != ".." ) {
        $info['all'][] = $absPath = $dir . DIRECTORY_SEPARATOR . $item;
        $stat = stat( $absPath );		
	switch( $stat['mode'] & 0170000 ) {
	  case 0100000: 
            $info['files'][]       = $absPath; 
            break;
          case 0040000: 
            $info['directories'][] = $absPath; 
            fileProfileDir( $absPath ); 
            break;
          case 0120000: 
            $info['links'][]       = $absPath; 
            break;
          case 0140000: 
            $info['sockets'][]     = $absPath; 
            break;
          case 0010000: 
            $info['pipes'][]       = $absPath; 
            break;
        }
      }
    }
  }
  clearstatcache();       
  return $info;
}
Eigene Bewertung: Keines Durchschnitt: 4.7 (3 Bewertungen)
Inhalt abgleichen