[PHP] Externes Verzeichnis auslesen

Bevor die Fragen kommen: Ja, ich habe bereits danach gegoogelt und ja, ich weiß, dass bplaced das nicht erlaubt. Es ist für meinen eigenen Server und komme trotzdem nicht weiter.

Ich habe ein offenes Verzeichnis (ohne Index-Datei) und möchte mit PHP die jüngste (Zip)-Datei auslesen. Wie ich die jüngste Datei finde, wüsste ich, der Scripf funktioniert auch. Nur weiß ich nicht, wie das auf externen Verzeichnisen funktioniert.

Das man hier mit fopen arbeitet, habe ich bereits rausgefunden, dass ich hier mit fopen arbeiten muss, aber hier muss man den Pfad zur Datei angeben. Ich bräuchte also immer noch etwas, womit ich die Dateinamen aufgreifen kann und sie dann in ein Array oder for-Schleife einbinden kann, und hier weiß ich nicht weiter.

Würde mich sehr über Tipps freuen, da es wichtig ist, immer die neuste Datei auszugeben.

Gruß, DMan

Um auf externe (remote) Verzeichnisse zugreifen zu können, brauchst du ein Protokoll welches das Konzept “Verzeichnis” und “Datei” versteht. FTP z.B. wäre so eines. Sicherlich könnte man auch einfach eine “index” Datei per HTTP auslesen und versuchen daraus etwas sinnvolles zu erschließen, aber ob das so eine gute Idee ist…

Generell ist mir noch nicht ganz klar was genau du versuchst zu erreichen.

Möchtest du mit einem PHP Script, welches auf deinem Server liegt, auf ein Verzeichnis eines anderen Servers zugreifen um dort die jüngste Datei zu ermitteln?

Ja generell kann man ja die vom Apachen erzeugte Ausgabe für das Verzeichnis analysieren.
Dazu sollte man wohl erst einmal gucken, ob das anständiges XML/XHTML ist, wenn ja,
kann man PHP-Module für DOM oder XSLT verwenden, um Daten zu extrahieren oder anders
zu formatieren oder zu sortieren.
Wenn nein, gibt es auch noch ein Modul, mit welchem man HTML-Markierungssuppe zu
XML/XHTML konvertieren kann (entsprechend dem Programm tidy), was man dann vorher auf
die Ausgabe anwenden muß.

Vermutlich wird die Ausgabe solch ener Index-Information beim Apache ja nicht allzu häufig
geändert, von daher läßt sich das auf dem Wege wohl schon für einen gewissen Zeitraum
automatisch auslesen.

Oder packs dir in ein json, dann kann alles damit arbeiten.

[code]// Server
function giveMeDirAsArray($dir, $recursive = true, $depth = 5) {
if (strpos($dir, ‘…/’) !== false || strpos($dir, ‘./’) !== false) return [];
$result = [];
try {
if ($handle = opendir($dir)) {
while (false !== ($entry = readdir($handle))) {
if ($enty !== ‘.’ && $enty !== ‘…’) {
$path = $dir.DIRECTORY_SEPARATOR.$entry;
if (is_dir($path) && $recursive && $depth > 0) array_push($result, [‘name’ => $entry, ‘timestamp’ => filetime($path), ‘subdir’ => giveMeDirAsArray($path, true, $depth-1)]);
else array_push($result, [‘name’ => $entry, ‘timestamp’ => filetime($path), ‘subdir’ => []]);
}
}
closedir($handle);
} else {
throw new IOException();
}
} catch (IOException $ioe) {
Log::error(‘error, while reading {0}’, [$dir], $ioe->getTraceAsString());
}
return $result;
}
echo json_encode(giveMeDirAsArray($_GET[‘path’], true, 0));

// client
$meinArray = json_decode(file_get_contents(‘url’));
var_dump($meinArray);[/code]
Falls du kein Slf4j-ähnliches Log-Konstrukt geschrieben hast, lässt du einfach den Teil mit try-catch weg.

Was ich vergessen habe: Aus Sicherheitsgründen bietet es sich an, bzw. ist es fast notwendig, dass du das Ganze mit HTTP-Basic-Auth absicherst. Auf dem Server erstellst du ein Selfsigned Zertifikat, welches du in den key-store von php (ich glaube, bei php curl) einbindest.