| 
            	 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: 
			  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($handle, CURLOPT_URL, $url);       curl_setopt($handle, CURLOPT_RETURNTRANSFER, 0);       curl_setopt($handle, CURLOPT_UPLOAD, 0);       curl_setopt($handle, CURLOPT_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.
 
 
  |