prüfen ob Datei in zwei Verzeichnisse doppelt ?
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anhieb
array
aufruf
break
code
datei
ergebnis
file
frage
gleiche dateiname
http
index
minute
ordner
pfad
ressource
same
url
verzeichnis
vorliegen
-
Hallo
wie kann ich überprüfen, ob in zwei Unter-Ordnern eine Datei doppelt vorhanden ist,
also ... ob der gleiche Dateiname in beiden Ordnern vorhanden ist
und dann eine Liste der "doppelten Dateien" ausgeben ?
Beispiel:
------------------------------------------------- /ordner1/aaaa.txt | /ordner2/yyyy.txt /ordner1/bbbb.txt | /ordner2/xxxx.txt /ordner1/cccc.txt | /ordner2/aaaa.txt /ordner1/zzzz.txt | /ordner3/zzzz.txt ------------------------------------------------- Ergebnis: (in beiden Verzeichnissen vorhanden) /aaaa.txt /zzzz.txt
wie kann ich sowas mit PHP machen ?
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
habe auf Anhieb zwei DInge gefunden, nach nicht einmal 2 Minuten... google sei Dank
1: http://stackoverflow.com/questions/13471336/find-duplicate-files-by-names-with-php
2: http://www.phpclasses.org/package/6156-PHP-Find-files-with-the-same-contents.html -
<?php $handle=opendir ("pfad1"); $handle2=opendir("pfad2"); $a=0; while ($datei = readdir ($handle)) { $ver1[$a]=$datei; $a++; } $a=0; while ($datei = readdir ($handle2)) { $ver2[$a]=$datei; $a++; } $a=0; foreach($ver1 as $index) { foreach($vor2 as $index2) { if($index==$index2) { echo 'es gibt eine Übereinstimmung'; $a=1; break; } } if($a==1) { break; } } closedir($handle); ?>
ist aber ungetetet -
ahhhh ... danke
jetzt weiss ich auch, warum es mit glob() nicht funktioniert hat,
denn glob() hat im Array auch den Pfad (das Verzeichnis)
und dann sind die "Strings" ja auch immer unterschiedlich
habe mal eine Funktion draus gebastelt, ist bestimmt noch verbesserungsfähig
// ----------------------------------------------------- function dir_compare($dir1, $dir2) { $handle1 = opendir($dir1); $comp1 = array(); while ($datei = readdir($handle1)) { if ($datei != '.' && $datei != '..') { $comp1[]=$datei; } } closedir($handle1); $handle2 = opendir($dir2); $comp2 = array(); while ($datei = readdir($handle2)) { if ($datei != '.' && $datei != '..') { $comp2[]=$datei; } } closedir($handle2); $result = array_intersect($comp1, $comp2); return $result; } // -----------------------------------------------------
Aufruf:$doppelt = dir_compare('pfad1', 'pfad2');
Ergebnis: Array mit doppelt vorkommenden Dateinamen
zum Prüfen, ob "doppelt" nehme ich einfach array_intersect()
dann spare ich mir den Vergleich mit den foreach Schleifen
und habe das Ergebnis gleich als Array vorliegen.
hier auch noch eine Version mit glob()
// ----------------------------------------------------- function dir_compare2($dir1, $dir2) { $dir1 = rtrim($dir1,'/'); $xvz1= glob($dir1.'/*.*'); $comp1 = array(); foreach($xvz1 as $datei) { if ($datei != '.' && $datei != '..') { $comp1[] = str_replace($dir1.'/','',$datei); } } $dir2 = rtrim($dir2,'/'); $xvz2 = glob($dir2.'/*.*'); $comp2 = array(); foreach($xvz2 as $datei) { if ($datei != '.' && $datei != '..') { $comp2[] = str_replace($dir2.'/','',$datei); } } $result = array_intersect($comp1, $comp2); return $result; } // -----------------------------------------------------
ist die Frage was Ressourcen-schonender ist, mit readdir() oder mit glob()
... oder ganz anders?
Beitrag zuletzt geändert: 10.11.2013 12:36:30 von snapy -
Wenn dir geschwindigkeit wirklich wichtig ist, solltest du vielleicht gucken, ob du die Datein nicht in einer Datenbank chachen solltest.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage