Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

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

 

:: SELFPHP Forum ::

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

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
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.


 


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.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt