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.
|