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-Upload mit CURL


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 4 >= 4.0.3
  • PHP 5
  • CURL-Bibliothek

Datei(en)

curl_upload.php

Problem

Sie haben bereits in einem vorangegangenen Kapitel gesehen, wie Sie ein Backup Ihrer Datenbank oder von Dateien in Ihrem Webordner erstellen können. Sicherlich möchten Sie aber diese Backups nicht auf dem gleichen Server speichern, sondern auf einem entfernten Backup-Server.

Die Frage ist nur, wie man die Backupdatei auf dem anderen Server sichert. Das nachfolgende Beispiel erledigt genau diese Aufgabe. Sie können also beide Programme kombinieren und erhalten dadurch eine vollständige Backup-Lösung.

Lösung

Wir werden in unserem Beispiel ein Backup (Upload) einer Datei auf einen anderen Server realisieren. Der Kapitelbezeichnung CURL gemäß werden wir dabei ausschließlich die CURL-Funktionen nutzen.

Hier im Beispiel geht es zunächst nur um die Realisierung des Uploads und seiner Ausgaben. In einem späteren Beispiel werden Sie sehen, wie eine Komplettlösung aussehen könnte, also Upload, Download und Speicherung der Info-Daten in einer Datenbank.

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

Die Funktion curlUpload() erwartet als Parameter zum einen ein Array mit den Verbindungswerten (Host, Pfad, neuer Dateiname, FTP-Benutzername, FTP-Passwort) und zum anderen die Datei, die per Upload auf den anderen Server kopiert werden soll.

Zuerst öffnen (35) wir die Datei, die wir später auf den anderen Server kopieren werden. Die übermittelten Verbindungswerte aus unserem Array müssen wir im Anschluss daran zu einem Verbindungsstring zusammenfügen (36). Der Aufbau dieses Strings unterliegt einer Norm, die eingehalten werden muss.

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 in dem Ordner

/kunden/27356282/www/htdocs/backups

speichern, 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-44) 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 ja einen Upload durchführen wollen und keine Seite abfragen, müssen wir den Transfermodus (41) für diese Verbindung deaktivieren (ungleich 0 setzen).

Im nächsten Schritt bereiten wir PHP darauf vor (42), dass es sich bei dieser Verbindung um einen Upload handelt, um im nächsten Schritt (43) die Datei für den Upload zu übergeben. Der letzte zu setzende Parameter bestimmt die Dateigröße der Upload-Datei. Die Größe müssen wir PHP vor dem Upload mitteilen (44).

Da alle Parameter gesetzt sind, können wir jetzt den Upload starten (46) und erhalten als Rückgabe (48) alle Informationen (wie zu Beginn des Kapitels beschrieben) in einem Array geliefert. Wir schließen die CURL-Verbindung (50) und geben das Array (52) 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:
054:
function curlUpload($ftp,$ftpFile) {
    
    
$fp   fopen($ftpFile"r"); 
    
$url  "ftp://".$ftp['user'].":".$ftp['passwd']."@". 
             $ftp['host'].":21" .$ftp['pfad'].$ftp['file']; 
    
    
$handle curl_init();     
    
    
curl_setopt($handleCURLOPT_URL$url);  
    
curl_setopt($handleCURLOPT_RETURNTRANSFER1);  
    
curl_setopt($handleCURLOPT_UPLOAD1);  
    
curl_setopt($handleCURLOPT_INFILE$fp);  
    
curl_setopt($handleCURLOPT_INFILESIZEfilesize($ftpFile));  

    
$result curl_exec($handle);  

    
$info curl_getinfo ($handle);

    
curl_close($handle); 
    
    return 
$info

}
Beispiel 10.8: curl_upload.php

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

Die Funktion makeInfoUpload() 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 (65), so handelt es sich bei der Ausgabe um Megabyte und wir formatieren die Ausgabe so, dass nur noch zwei Stellen hinter dem Komma angezeigt werden (67). War der Wert kleiner (68), formatieren wir ihn nach Kilobyte (70).

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

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

063:
064:
065:
066:
067:

068:
069:
070:

071:
072:
073:
074:
075:

076:
077:
078:

079:
080:
081:

082:
083:
084:
085:
function makeInfoUpload($info) {
    
    if(
$info['speed_upload'] >= 1000000) {
        
$speed $info['speed_upload'] / 1000000;
        
$infoF['speed_upload'] = sprintf("%01.2f"$speed) . 
                
' MegaByte/s';
    } else {
        
$speed $info['speed_upload'] / 1000;
        
$infoF['speed_upload'] = sprintf("%01.1f"$speed) . 
                
' KiloByte/s';
    }
    
    if(
$info['size_upload'] >= 1000000) {
        
$speed $info['size_upload'] / 1000000;
        
$infoF['size_upload'] = sprintf("%01.2f"$speed) . 
                
' MegaByte/s';
    } else {
        
$speed $info['size_upload'] / 1000;
        
$infoF['size_upload'] = sprintf("%01.1f"$speed) . 
                
' KiloByte/s';
    }
    
    
$infoF['total_time'] = sprintf("%01.1f"$info['total_time']) . 
        
' Sek.';
    
    return 
$infoF;
    
}
Beispiel 10.9: curl_upload.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 (87)
  • FTP-Passwort (88)
  • HOST (89)
  • Pfad (90), ausgehend vom Document-Root
  • Datei (91) Pfadangabe inkl. dem neuen Dateinamen
  • Uploaddatei (92), die zu kopierende Datei

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

087:
088:
089:
090:
091:
092:
093:
094:
095:
096:
097:
098:
099:
100:
101:
$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 curlUpload($ftp,$ftpFile);

$infoF makeInfoUpload($info);

echo 
'Dateigröße: ' $infoF['size_upload'] . '<br>';
echo 
'Geschwindigkeit: ' $infoF['speed_upload'] . '<br>';
echo 
'Gesamtzeit: ' $infoF['total_time'] . '<br><br>';
print_r($info);
Beispiel 10.10: curl_upload.php

Wie Sie sehen, war der Upload auch hier relativ einfach. Die Informationen könnten Sie z. B. in eine Datenbank speichern und statistisch auswerten. Zusätzlich können Sie die Datei mit einem CronJob verknüpfen, der dann täglich die Backupdatei auf dem Backup-Server speichert. Sie werden später in diesem Buch eine derartige Lösung vorgestellt bekommen.

Ausgabe im Browser

Dateigröße: 1.71 Megabyte/s
Geschwindigkeit: 2.43 Megabyte/s
Gesamtzeit: 0.7 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