Moin moin,
ich hab ein Problem, wo ich langsam verzweifel... es existieren Dateien, die verschoben, umbenannt oder gelöscht werden können. Diese Dateien haben eine eindeutige ID, sind im System-Verzeichnis also irgendwo dann immer aufzufinden. Nur ist jetzt das Problem die Suche...
Die Suche startet an der letzten bekannten Pfadadresse, wechselt ein Verzeichnis höher (bis Root-Verzeichnis erreicht ist) und soll da erstmal alle Ordner durchsuchen, wenn die Datei da nicht gefunden wird, soll eben wieder eins höher - ich habs geschafft, dass die Datei gefunden wird, aber nicht, dass mir der Pfad ausgegeben oder die Suche abgebrochen wird... kann vielleicht jemand sagen wo das Problem ist?
ich hab ein Problem, wo ich langsam verzweifel... es existieren Dateien, die verschoben, umbenannt oder gelöscht werden können. Diese Dateien haben eine eindeutige ID, sind im System-Verzeichnis also irgendwo dann immer aufzufinden. Nur ist jetzt das Problem die Suche...
Die Suche startet an der letzten bekannten Pfadadresse, wechselt ein Verzeichnis höher (bis Root-Verzeichnis erreicht ist) und soll da erstmal alle Ordner durchsuchen, wenn die Datei da nicht gefunden wird, soll eben wieder eins höher - ich habs geschafft, dass die Datei gefunden wird, aber nicht, dass mir der Pfad ausgegeben oder die Suche abgebrochen wird... kann vielleicht jemand sagen wo das Problem ist?
PHP:
<?php
function adjustPath($soapfile, $path, $docID) {
$status = false;
print "nun in adjustPath: $path \n$docID\n\n";
@$directory = scandir($path);
if(!$directory) {
$pos = strripos($path, "/");
$newpath = substr($path, 0, $pos);
print "$path does not exist! one step up: $newpath\n";
if($newpath != "$rootpath") {
return adjustPath($soapfile, $newpath, $docID);
}
}
else {
if($directory) {
foreach ($directory as $dir) {
if($dir != "." and $dir != "..") {
if(is_file($path."/".$dir) and $dir == "meta.inf") {
if(checkFile($path."/".$dir, $docID) !== false) {
print "<adjustPath>: file found: $dir in $path\n";
addPath($soapfile, $path, $docID);
$status = $status OR $path."/".$dir;
break;
}
}
if(is_dir($path."/".$dir) and $dir != "_repository") {
if( ($newpath = subscan($path."/".$dir, $docID))) {
addPath($soapfile, $newpath, $docID);
print "Newpath from adjustpath: $newpath\n";
//return $newpath;
#$status = $status OR $newpath; // logische verknüpfung, ist der 1x auf true bleibt er's auch
$status = $newpath;
break;
}
}
}
}
return $status;
}//if subdirs
}//else
}
function subscan($dir, $docID) {
print "subscan: $dir\n";
$status = false;
@$subdir = scandir($dir);
if($subdir) {
foreach($subdir as $sub) {
if($sub != "." and $sub != "..") {
if(is_file($dir."/".$sub) and $sub == "meta.inf") {
#print "scanne meta.inf in $dir / $sub\n";
if(checkFile($dir."/".$sub, $docID)) {
print "subscan- dir: File found in $dir - - $sub!\n";
#print $dir."\n";
return $dir;
}
}
if(is_dir($dir."/".$sub) and $sub != "_repository") {
print "subscan-dir: ".$dir." / ".$sub."\n";
$status = $status or subscan($dir."/".$sub, $docID);
}
}
}
}
return $status;
}
function checkFile($file, $docID) {
print "checkFile: ".$file."\n";
@$lines = file($file);
if($lines) {
foreach($lines as $line) {
if(substr_count($line, "DOCUMENTID") > 0) {
$idline = $line;
$pos = stripos($idline, "=");
$fullID = trim(substr($idline, $pos+1));
print "\n";
if(strcmp($fullID, $docID) == 0) {
print "MAAAATCH!\n";
return true;
}
}
}//foreach
}
return false;
}
?>
Zuletzt bearbeitet: