Teil von  SELFPHP
Professional CronJob-Service

Suche

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP?
In über 130.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 
 
FTP-Download mit CURL

Am Ende der Seite finden Sie das komplette Beispiel als Download.

Systemvoraussetzung

  • Linux
  • Windows
  • PHP 4 >= 4.0.3
  • PHP 5
  • curlBibliothek

Datei(en)

curl_download.php

Problem


Sie haben im vorherigen Beispiel gesehen, wie ein Upload mit CURL funktioniert. Jetzt müssen wir auch das Gegenstück dazu haben, also den Download, der unsere Backupdatei wieder auf unseren Server zurückkopiert.


Lösung

Im Wesentlichen gleicht der Download dem Upload, allerdings müssen einige Parameter verändert werden, damit die Datei wieder auf unserem Server gespeichert werden kann. Beim Upload haben wir bewusst eine Ausgabe unterdrückt, da wir die Daten von unserem Server zu einem Backup-Server transportieren wollten.

Bei einem Download hingegen ist das anders, hier wollen wir eine Datei von einem entfernten Server auf unseren Server transportieren, also müssen wir die Ausgabe zulassen und das Ergebnis in eine Datei schreiben.

function curlDownload($ftp, $ftpFile)
   @param   array   $ftp
   @param   string   $ftpFile
   @return   array   $info

Die Funktion curlDownload() erwartet als Parameter ein Array mit den Verbindungswerten (Host, Pfad, neuer Dateiname, FTP-Benutzername, FTP-Passwort) und den Dateinamen für die Speicherung der Datei auf dem eigenen Server.

Zuerst öffnen (35) wir die Datei, die wir später auf unseren Server schreiben werden. Hier müssen Sie beachten, dass Sie diese Datei im Schreibmodus (w) öffnen. Die übermittelten Verbindungswerte aus unserem Array müssen wir im Anschluss daran zu einem Verbindungsstring zusammenfügen (36). Da hier immer wieder Fehler gemacht werden, erklären wir noch einmal den Aufbau dieses Strings.

ftp://BENUTZERNAME:PASSWORT@HOST:PORT/DateiMitPfadangabe

Nachfolgend sehen Sie ein Beispiel für den zusammengesetzten String:

ftp://ftp3782637:km63TgD@nureinbeispiel4.de:21/www/curlftp/pecl5.1.2Win32.zip

Bei der Pfadangabe ist eines zu beachten: Die Pfadangabe beginnt in Ihrem Document-Root (wie bei Ihrem FTP-Programm auch). Sollte also Ihre Webpräsenz im Ordner

/kunden/27356282/www/htdocs

liegen, und Sie möchten die Datei meinBackup.zip aus dem Ordner

/kunden/27356282/www/htdocs/backups

für den Download holen, so müssen Sie folgende Pfadangabe benutzen:

/backups/meinBackup.zip

Wir initialisieren wieder unsere CURL-Session (38) und setzen anhand des Handle im weiteren Verlauf die Parameter (40-43) für die Verbindung. Zuerst setzen wir den Parameter (40) mit unserer URL, um überhaupt eine Verbindung zu dem entfernten Server zu erhalten.

Da wir dieses Mal ein Download durchführen wollen, also eine Ausgabe benötigen, müssen wir den Transfermodus (41) für diese Verbindung aktivieren (auf 0 setzen).

Im nächsten Schritt bereiten wir PHP darauf vor (42), dass es sich bei dieser Verbindung um einen Download handelt, indem wir den Wert wieder auf 0 (Null) setzen. Jetzt müssen wir lediglich den Handle für unsere Datei, in die wir schreiben wollen, angeben (43).

Da alle Parameter gesetzt sind, können wir jetzt den Download starten (45) und erhalten als Rückgabe (47) alle Informationen in einem Array geliefert. Wir schließen die CURL-Verbindung (49) und geben das Array (51) an die aufrufende Stelle zurück.

033:
034:
035:
036:

037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
function curlDownload($ftp,$ftpFile) {
    
    
$fp   fopen($ftpFile"w"); 
    
$url  "ftp://".$ftp['user'].":".$ftp['passwd']."@".
               
$ftp['host'].":21" $ftp['pfad'].$ftp['file']; 
    
    
$handle curl_init();     
    
    
curl_setopt($handleCURLOPT_URL$url);  
    
curl_setopt($handleCURLOPT_RETURNTRANSFER0);  
    
curl_setopt($handleCURLOPT_UPLOAD0);  
    
curl_setopt($handleCURLOPT_FILE$fp);
    
    
$result curl_exec($handle);  

    
$info curl_getinfo ($handle);

    
curl_close($handle); 
    
    return 
$info

}
Beispiel 10.11: curl_download.php

function makeInfoDownload($info)
   @param   array   $info
   @return   array   $infoF

Die Funktion makeInfoDownload() erwartet als Parameter das vollständige Array mit den Informationen der zuletzt abgearbeiteten CURL-Sitzung. Wir rechnen in dieser Funktion lediglich die Werte für eine ansprechende Darstellung um. Zuerst formatieren wir die durchschnittliche Übertragungsgeschwindigkeit. Bei diesem Wert handelt es sich um Byte/Sekunde, die wir entweder in Kilobyte oder Megabyte umrechnen wollen.

Sollte der Wert größer oder gleich 1 Million sein (64), handelt es sich bei der Ausgabe um Megabyte, und wir formatieren die Ausgabe so, dass nur noch zwei Stellen hinter dem Komma angezeigt werden (66). War der Wert kleiner (67), formatieren wir ihn nach Kilobyte (68).

Genauso verfahren wir mit der Dateigröße (72). Sollte der Wert größer oder gleich 1 Million sein (72), formatieren wir ihn nach Megabyte (74), ansonsten nach Kilobyte (77).

Zum Schluss müssen wir nur noch die komplette Downloadzeit formatieren (80), um danach das neue Array mit den formatierten Zeiten und Größen (82) an die aufrufende Stelle zurückgeben zu können.

062:
063:
064:
065:
066:

067:
068:
069:

070:
071:
072:
073:
074:

075:
076:
077:

078:
079:
080:

081:
082:
083:
084:

function makeInfoDownload($info) {
    
    if(
$info['speed_download'] >= 1000000) {
        
$speed $info['speed_download'] / 1000000;
        
$infoF['speed_download'] = sprintf("%01.2f"$speed) . 
                                   
' MegaByte/s';
    } else {
        
$speed $info['speed_download'] / 1000;
        
$infoF['speed_download'] = sprintf("%01.1f"$speed) . 
                                   
' KiloByte/s';
    }
    
    if(
$info['size_download'] >= 1000000) {
        
$speed $info['size_download'] / 1000000;
        
$infoF['size_download'] = sprintf("%01.2f"$speed) . 
                                   
' MegaByte/s';
    } else {
        
$speed $info['size_download'] / 1000;
        
$infoF['size_download'] = sprintf("%01.1f"$speed) . 
                                    ' KiloByte/s';
    }
    
    
$infoF['total_time'] = sprintf("%01.1f"$info['total_time']) . 
                                   
' Sek.';
    
    return 
$infoF;
    
}

Beispiel 10.12: curl_download.php

Die restliche PHP-Datei besteht hauptsächlich aus Parametern und den Funktionsaufrufen. Sie müssen folgende Parameter für die Verbindung aufführen:

  • FTP-Benutzername (86)
  • FTP-Passwort (87)
  • HOST (88)
  • Pfad (89), ausgehend vom Document-Root
  • Datei (90) Pfadangabe inkl. dem neuen Dateinamen
  • Name der Download-Datei (91), die gespeichert werden soll

Sind alle Parameter gesetzt, können Sie den Download starten (93) und erhalten als Rückgabewert ein Array mit den Informationen der CURL-Verbindung. Sie können nachfolgend noch die Informationen formatieren (95), da die Werte in Byte vorliegen und die Zeiten ebenfalls nicht formatiert sind.

086:
087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
$ftp['user'] = 'ftp1042434-test';
$ftp['passwd'] = 'up24TzF';
$ftp['host'] = 'nureinbeispiel4.de';
$ftp['pfad'] = '/www/';
$ftp['file'] = 'curlftp/pecl-5.1.2-Win32.zip';
$ftpFile 'pecl-5.1.2-Win32.zip';

$info curlDownload($ftp,$ftpFile);

$infoF makeInfoDownload($info);

echo 
'Dateigröße: ' $infoF['size_download'] . '<br>';
echo 
'Geschwindigkeit: ' $infoF['speed_download'] . '<br>';
echo 
'Gesamtzeit: ' $infoF['total_time'] . '<br><br>';
print_r($info);
Beispiel 10.13: curl_download.php

Ausgabe im Browser

Dateigröße: 1.71 Megabyte/s
Geschwindigkeit: 286.6 Kilobyte/s
Gesamtzeit: 6.0 Sek.


 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.




 

Download

Info   ZIP BZIP2 TARGZ
Größe   1.26 Kilobyte 1.41 Kilobyte 1.33 Kilobyte

Alle Beispiele als PHP-Datei(en)

Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.

Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.

Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.

Zurück zur Übersichtsseite


 




:: Premium-Partner ::

Webhosting/Serverlösungen

Pixel X weitere Premium-Partner
 

:: SELFPHP Sponsor ::

Zend Technologies GmbH weitere Sponsoren
 


:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Webhosting/Serverlösungen

Suchen Sie den für Sie passenden IT-Dienstleister für Ihr Webhosting-Paket oder Ihre Serverlösung?

Sie sind nur ein paar Klicks davon entfernt!


 

Ausgewählter Tipp im Bereich PHP-Skripte


Pfadangabe für inkludierte Dateien setzen

Weitere interessante Beispiele aus dem SELFPHP Kochbuch finden Sie im Bereich PHP-Skripte
 

SELFPHP Code Snippet


R-, G-, B-Anteile in einen Hexfarbwert umrechnen

Weitere interessante Code Snippets finden Sie auf SELFPHP im Bereich PHP Code Snippets
 
© 2001-2024 E-Mail SELFPHP Inh. Damir Enseleit, info@selfphp.deImpressumKontakt
© 2005-2024 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de