Ich versuche, Ordner rekursiv zu scannen und jeden gefundenen * .h Dateipfad in einem Array zu speichern.PHP 5.6 - Funktion is_dir() Berechtigungen Problem
function findfiles($input, &$array){
$dir = scandir($input);
foreach($dir as $file)
{
if ($file !== "." && $file !== "..")
{
if (is_file(realpath($file)) && substr($file, -2) === ".h")
{
array_push($array, realpath($file));
}
if (is_dir(realpath($file)) //I'M EVEN USING ABSOLUTE PATH
{
findfiles(realpath($file), $array);
}
}
}
}
$input="./"
$array = array();
findfiles($input, $array);
Ich denke, das sollte funktionieren, aber Funktion is_dir() gibt FALSE für Verzeichnisse „./atest/AA“ und „./atest/FolderInside“ auch wenn ich gesetzt, alle Berechtigungen verfügen.
drwxrwxrwx 2 root root 0 úno 14 18:46 AA
drwxrwxrwx 2 root root 0 úno 14 15:12 FolderInside
und funktioniert gut mit anderen Ordnern "Atest" und "Test1" sogar sie haben die gleichen Berechtigungen gesetzt.
drwxrwxrwx 2 root root 0 úno 14 18:46 atest
drwxrwxrwx 2 root root 0 úno 14 15:39 test1
Bitte warum?
Ich habe die falsche Zeile meines Codes geändert. Tatsächlich benutze ich realpath ($ file), das den vollständigen Pfad der Datei zurückgibt. Könntest du bitte einen Blick darauf werfen und mir sagen, ob es immer noch schlecht ist? Ich denke, ich muss Ihre Methode nicht verwenden, aber vielen Dank für Ihre Antwort. –
'realpath' ist in Ihrem Code nicht von Nutzen, da' scandir' nur eine Liste von Dateinamen ohne Pfade zurückgibt. Und 'realpath' kann nicht feststellen, aus welchem Verzeichnis das' file.h' kommt ... Wenn es also nicht im aktuellen Verzeichnis vorhanden ist, gibt es nur 'false' zurück. –
Danke, Sie haben Recht. Es funktioniert jetzt. –