Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.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


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.


 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt