[PHP] Ordner von FTP-Server herunterladen

Hotwave

Multitalent
ID: 132230
L
24 April 2006
3.210
301
Einzelne Dateien herunterzuladen ist ja nicht allzu schwierig, jedoch fehlt mir der Lösungsansatz einen gesamten Ordner mit beliebig vielen Subdirectories per PHP herunterzuladen also quasi den Ordner zu spiegeln. Natürlich muss man da mit Schleifen arbeiten, aber mir fehlt leider der Ansatz...
Ein Snippet dazu blieb' mir leider auch bisher verborgen :(
 
Rekursion is das Zauberwort ;)
PHP:
function download_rekursive($name)
{
  if(is_file($name))
    ftp_get($name);
  else if(is_folder($name))
  {
    $folder = $name;
    foreach($file in $folder)
      download_rekursive($file);
  }
}
edit: Is Pseudocode, falls es keiner merkt :biggrin:
 
Hallo,

ich habe leider das selbe Problem wie hotwave (hoffe das ich sein Ziel richtig verstanden habe und meine frage hierzu passt :) )nur leider auch viel weniger Ahnung... deswegen würde ich thehacker bitten (oder auch gerne wen anders) ob er mir den Codeschnipsel Auskommentieren könnte.

bei mir ist das nicht so ganz komplex ich würde nur mit einer POST Übergabe aus mysql über einen Button ankommen wie zum bsp party_1 wo die Bilder (nur Bilder keine Unterverzeichnisse) dann unter /pictures/party_1/ liegen würden.

Das Ziel ist dann einfach diese Bilder die in diesem Ordner sind bei dem User zu speichern so das er die ganzen Partybilder dann hat.

Danke im Voraus
 
[...]deswegen würde ich thehacker bitten (oder auch gerne wen anders) ob er mir den Codeschnipsel Auskommentieren könnte.

bei mir ist das nicht so ganz komplex[...] (nur Bilder keine Unterverzeichnisse) [...]
Wenn du keine Unterverzeichnisse hast, brauchst du ja auch keine Rekursion. Folglich also ein anderes Problem, dass ich allerdings nicht wirklich verstehe.

Du willst irgendwas mit Bildern in einem Ordner machen, wie ich das verstanden hab ? Dann brauchst du ja nur opendir(), readdir() und closedir().
Alternativ kannst du auch direkt mit glob() an die Sache rangehen.
 
erst mal danke für die schnelle Antwort aber ok ist wohl ein wenig unverständlich geschrieben :)

Also, ich hab ein paar Bilder mit verschiedenen Kategorien (z.B. Skiurlaub 2007, Party a, Fasching 2007, usw.) jede davon hat ihren eigenen Ordner auf dem Webserver mit unterschiedlich vielen Bildern.

Wenn jetzt jemand die Bilder von Fasching 2007 haben will soll er einen Button drücken können (z.B. Download Fasching 2007), so dass dann die Bilder auf seinem Rechner landen (also halt der ganze Ordner sich runterlädt) und nicht nur die Dateien die man angibt.

einzelne Dateien die man vorher angibt funktionieren ja wunderbar mit ftp_get aber wie er alles aus einem angegeben Ordner runterlädt ist mir noch ein Rätsel

Hoffe ihr könnt mir jetzt folgen :D
 
Warum nicht einfach per http-download?...Kannst die Files ja auch vorher von 'nem Script zippen lassen und dann dem User als normalen Download anbieten :)
 
[...] so dass dann die Bilder auf seinem Rechner landen (also halt der ganze Ordner sich runterlädt) und nicht nur die Dateien die man angibt.
Ganze Ordner kann man nicht downloaden. Ein User sendet einen HTTP-Request, damit bekommt er auch nur genau eine Response, also nur genau ein Bild.
FTP ist hier sowieso fehl am Platz, da der User ja keinen FTP-Server/-Clienten laufen hat, damit du ihm einfach mal so die Daten auf seine Platte sendest.

Du kannst, wurde schon angesprochen, dem User die Bilder als ZIP-Archiv senden. Dann requestet er einmal, dass er die Bilder von z.B. Fasching 2007 haben will und kriegt n Archiv, wo alle Bilder drin sind.

Oder alternativ, du bietest sie direkt per FTP an. Dann ist kein Scripting notwendig, sondern nur eine entsprechende Konfiguration eines FTP-Servers. Dazu musst du dich dann an den Server-Administrator wenden.
 
Ich brauch nochmal deine Hilfe, theHacker. Wollte das Script jetzt endlich fertigstellen, aber bin noch auf Probleme gestoßen.
Wenn die funktion nun feststellt, dass $name ein Ordner ist, dann muss sie ja einen gleichnamigen Ordner auf dem Space anlegen und in diesen wechseln sowie auch in den Ordner auf dem Remote-FTP wechseln und evtl. vorhandene Files downloaden. Hier liegt auch das Problem, wie wechsele ich zurück, wenn alle Files heruntergeladen wurden, um mit dem Download der anderen Dateien / Ordner im höheren Verzeichnis fortzufahren?...Gerade bei vielen Subdirectories komme ich da nicht weiter...
 
Ja, klar...aber wie bekomme ich das dann alles heruntergeladen? Mit dem Pseudocode oben funktioniert das ja fast, mir fehlt nur noch irgendwie die Idee den richtig mit mkdir und cdup zu ergänzen, sodass der alles herunterlädt und nichts auslässt :(
 
Ja, klar...aber wie bekomme ich das dann alles heruntergeladen? Mit dem Pseudocode oben funktioniert das ja fast, mir fehlt nur noch irgendwie die Idee den richtig mit mkdir und cdup zu ergänzen, sodass der alles herunterlädt und nichts auslässt :(

Du könntest als zweiten Parameter noch den aktuellen Pfad mitübergeben:
PHP:
function download_rekursive($name,$path = '/')
{
  if(is_file($name)) {
    $localeFile = $path . $name;
    ftp_get($name,$localeFile);
  }
  else if(is_folder($name))
  {
    $folder = $name;
    makeDir($folder);
    foreach($file in $folder)
      download_rekursive($file,$path . $file . '/');
  }
}