![]() |
| | LinkBack | Themen-Optionen | Thema durchsuchen |
| | Nach oben #1 |
| Lutz Mahlstedt Registriert seit: 14.08.2005 Ort: Nienburg / Weser
Beiträge: 827
| Inhaltsverzeichnis 1) Einleitung 2) Eine Verbindung zu einem FTP-Server herstellen 3) Aktuelles Verzeichnis und sein Inhalt 3.1) Verzeichnisinformationen auswerten 3.2) Das aktuelle Verzeichnis wechseln 4) Download vom Server 5) Upload auf den Server 6) Kopieren, verschieben, löschen, etc. 6.1) Umbenennen von Dateien und Verzeichnissen 6.2) Ein neues Verzeichnis anlegen 6.3) Setzen von Zugriffsrechten 6.4) Ein Verzeichnis / eine Datei löschen 7) Abschließende Worte 1) Einleitung (Inhalt) Das FTP-Protokoll sollte jedem, der eine Webseite betreibt denke ich ein Begriff sein. Jeder Webspace setzt voraus, dass die Webseite mittels FTP auf den Server hochgeladen wird und das, obwohl FTP mitlerweile kräftig in die Jahre gekommen ist und hier und da einige Schwachstellen aufweist, zumal die Übertragung in der Regel auch offen erfolgt und somit recht unsicher ist. Dass es vielen SystemAdministratoren die Schweißperlen auf die Stirn treibt ist also durchaus verständlich, aber es ändert nichts an der Tatsache, dass FTP immernoch zum alltäglichen Brot gehört. Mit PHP ist es möglich FTP-Funktionen selbst zu benutzen, um Dateien von / auf einen FTP-Server zu laden, Ordner zu erstellen oder Dateirechte zu ändern. Wie genau die Grundlagen funktionieren soll in diesem Tutorial näher erläutert werden. Üblicherweise laufen die meisten Webserver auf Linux, weshalb ich als Test-System ebenfalls einen Webserver (und somit halt auch FTP-Server) auf Linux-Basis nutze. Daher ist es möglich, dass die hier beschriebenen Daten bei einem Windows-FTP-Server nicht übereinstimmen. In PHP stehen einige Funktionen zur Verfügung, die unter FTP-Funktionen abrufbar sind. Zu den elementaren Funktionen zählen ftp_connect(), ftp_close() und ftp_login(), da diese generell für den Verbindungsaufbau und -abbau, sowie für den Login zuständig sind. 2) Eine Verbindung zum FTP-Server herstellen (Inhalt) Wenn wir nun also eine Verbindung zu einem FTP-Server herstellen wollen, fangen wir wie folgt an: PHP-Code: Mit ftp_connect() wird also nun die Verbindung zum FTP-Server auf dem Rechner mein-ftp-server.de mit dem Port 21 hergestellt. Port 21 ist der Standard FTP-Port, sollte dieser in der Realität abweichen aus welchen Gründen auch immer, dann ist er entsprechend zu ändern. In der Variablen $ftp wird die Verbindungs-ID gespeichert, die bei anderen FTP-Funktionen als erster Parameter mit übergeben werden muss, damit die Funktion weiß, welche FTP-Verbindung gemeint ist. Nach dem Herstellen der Verbindung wird sich auf dem FTP-Server mit ftp_login() angemeldet, sei es eine anonyme Anmeldung oder auch eine "echte" mit Benutzername/Kennwort. Danach kann man den FTP-Zugang nutzen. Ist die Nutzung des FTP-Zugangs beendet, sollte mittels ftp_close() die Verbindung wieder geschlossen werden, um Ressourcen freizugeben. In der Dokumentation ist leider nicht beschrieben, ob die Verbindung automatisch getrennt wird, wenn man die FTP-Verbindung nicht manuell schließt, von daher empfehle ich einfach aus Stilgründen die Funktion ftp_close() auszuführen, wenn man seine Arbeiten auf dem FTP-Server getan hat. 3) Aktuelles Verzeichnis und sein Inhalt (Inhalt) Wir haben nun also eine Verbindung zu einem FTP-Server. Fangen wir also mal einfach an und wollen erstmal wissen, in welchem Pfad wir uns gerade befinden. Die Funktion ftp_pwd() gibt uns die gewünschte Information: PHP-Code: Wollen wir jetzt eine Liste aller Verzeichnisse und Dateien haben, bekommen wir die Antwort mit der Funktion ftp_nlist(), welches ein Array mit allen Dateien und Ordnern zurückgibt. Leider ist aus dieser Liste nicht erkennbar, was ein Verzeichnis und was eine Datei ist. Hier anhand der Dateiendung zu entscheiden wäre zwar eine Möglichkeit, aber ist nicht das Wahre, da auch Verzeichnisse eine Namensgebung wie z.B. "verzeichnis.php" haben könnten. Abhilfe schafft dabei die Funktion ftp_rawlist(), welche ein Array mit detailierten Informationen zu den Dateien / Verzeichnissen liefert. Hierbei ist jedoch zwingend erforderlich die Informationen zu trennen, denn eine Ausgabe könnte in etwa wie folgt aussehen: PHP-Code: Code: Array
(
[0] => drwxr-xr-x 2 user group 4096 Jan 29 2005 admin
[1] => drwxr-xr-x 2 user group 4096 Jan 29 2005 cache
[2] => -rwxr-xr-x 1 user group 6725 Jan 29 2005 common.php
[3] => -rwxr-xr-x 1 user group 308 Jan 29 2005 config.php
[4] => drwxr-xr-x 2 user group 4096 Jan 29 2005 db
[5] => drwxr-xr-x 2 user group 4096 Jan 29 2005 docs
[6] => -rwxr-xr-x 1 user group 810 Jan 29 2005 extension.inc
[7] => -rwxr-xr-x 1 user group 3643 Jan 29 2005 faq.php
[8] => -rwxr-xr-x 1 user group 48639 Feb 5 2005 groupcp.php
[9] => drwxr-xr-x 4 user group 4096 Jan 29 2005 images
[10] => drwxr-xr-x 2 user group 4096 Jan 29 2005 includes
[11] => -rwxr-xr-x 1 user group 14515 Jan 29 2005 index.php
[12] => drwxr-xr-x 4 user group 4096 Jan 29 2005 language
[13] => -rwxr-xr-x 1 user group 7362 Jan 29 2005 login.php
[14] => -rwxr-xr-x 1 user group 12150 Jan 29 2005 memberlist.php
[15] => -rwxr-xr-x 1 user group 37639 Jan 29 2005 modcp.php
[16] => -rwxr-xr-x 1 user group 34446 Jan 29 2005 posting.php
[17] => -rwxr-xr-x 1 user group 72546 Jan 29 2005 privmsg.php
[18] => -rwxr-xr-x 1 user group 3947 Jan 29 2005 profile.php
[19] => -rwxr-xr-x 1 user group 42696 Jan 29 2005 search.php
[20] => drwxr-xr-x 3 user group 4096 Jan 29 2005 templates
[21] => -rwxr-xr-x 1 user group 23154 Jan 29 2005 viewforum.php
[22] => -rwxr-xr-x 1 user group 7234 Jan 29 2005 viewonline.php
[23] => -rwxr-xr-x 1 user group 45139 Jan 29 2005 viewtopic.php
)
Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Die ersten 3 stehen für den Benutzer, die zweiten 3 für die Gruppe der Datei und die letzten 3 für alle anderen Benutzer. Die Datei "common.php" kann hier also vom Benutzer "user" gelesen, geschrieben und ausgeführt werden (rwx), wohingegen die Gruppe "group" und alle anderen lediglich Rechte zum Lesen und Ausführen haben (r-x). Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Code: drwxr-xr-x 2 user group 4096 Jan 29 2005 admin Um die Daten zu trennen nutze ich die Funktion preg_split(), damit im Gegensatz zu explode() keine Leerzeilen entstehen. PHP-Code: Code: Array
(
[0] => drwxr-xr-x
[1] => 2
[2] => user
[3] => group
[4] => 4096
[5] => Jan
[6] => 29
[7] => 2005
[8] => admin
)
3.2) Das aktuelle Verzeichnis wechseln (Inhalt) Wenn wir nun also wissen, was es für Verzeichnisse gibt und wollen einfach in ein solches wechseln, nutzen wir die Funktion ftp_chdir(): PHP-Code: 4) Download vom Server (Inhalt) Da wir uns nun auf dem FTP-Server bewegen können, wollen wir auch mal eine Datei vom FTP-Server herunterladen. Dazu dient die Funktion ftp_get(). ACHTUNG! Dateien, die vom FTP-Server heruntergeladen werden, werden auf dem Rechner gespeichert, auf dem das PHP-Script läuft! Dies ist nicht zwangsläufig der Rechner, an dem sie das PHP_Script aufrufen! PHP-Code: Der vierte Parameter ist entweder FTP_BINARY oder FTP_ASCII, wobei letzteres nur bei Text-Dateien verwendet werden sollte. Nach der Ausführung dieses Befehls, befindet sich die Datei auf dem Rechner, auf dem das PHP-Script ausgeführt wurde. 5) Upload auf den Server (Inhalt) Der Umgekehrte Weg ist natürlich auch möglich: Eine Datei vom Rechner auf den FTP-Server übertragen geschieht mittels der Funktion ftp_put(). ACHTUNG! Es werden Dateien vom Rechner hochgeladen, auf dem das PHP-Script läuft! Dies ist nicht zwangsläufig der Rechner, an dem sie das PHP_Script aufrufen! PHP-Code: 6) Kopieren, verschieben, löschen, etc. (Inhalt) Natürlich können nicht nur Dateien hoch- und runtergeladen werden, sondern auch Verzeichnisse und Dateien umbenannt und gelöscht werden. 6.1) Umbenennen von Dateien und Verzeichnissen (Inhalt) Um z.B. eine Datei oder ein Verzeichnis umbenennen zu können, wird die Funktion ftp_rename() verwendet: PHP-Code: 6.2) Ein neues Verzeichnis anlegen (Inhalt) Für ein neues Verzeichnis kommt die Funktion ftp_mkdir() ins Spiel. PHP-Code: 6.3) Setzen von Zugriffsrechten (Inhalt) Um die Rechte für dieses Verzeichnis zu setzen, nutzt man die Funktion ftp_site() (gilt ebenso für Verzeichnisse, wie auch für Dateien; Ab PHP 5 gibt es auch direkt die Funktion ftp_chmod()): PHP-Code: Sollte man das Verzeichnis wieder löschen wollen, so geht das mit ftp_rmdir(): PHP-Code: 7) Abschließende Worte (Inhalt) Damit sollten die grundlegendsten Funktionen abgearbeitet sein. Sicherlich gibt es noch ein paar Funktionen mehr, aber ich gehe davon aus, dass am Ende dieses Tutorials verstanden wurde, wie die Funktionen zu handhaben sind :) Für alle Wissensdurstigen habe ich die Funktionen ja direkt verlinkt und gebe an dieser Stelle auch gerne nochmal den Link zur Doku über FTP allgemein: FTP-Funktionen In den Kommentaren der Doku stehen manchmal recht nützliche Hinweise, die einem bei manchen speziellen Problemen durchaus weiterhelfen können, also scheut euch nicht davor, auch die Kommentare zu lesen, die Leute sind schon nicht dumm, die die schreiben ;) Falls ihr noch Anmerkungen oder Verbesserungsvorschläge habt, dann scheut euch aber ebensowenig mir das mitzuteilen :) MfG Lutz alias MrNiceGuy Geändert von Jann Hendrik (27.06.2007 um 11:57 Uhr) |
| |
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Ftp Root Per Php | cspiegl | PHP-Programmierung | 18 | 13.05.2007 10:49 |
| [PHP] Mit PHP dynamisch einen RSS-Feed aktualisieren | Jann Hendrik | Tutorials | 0 | 13.03.2007 09:52 |
| PHP FTP function ... again | juergreh | PHP-Programmierung | 3 | 08.05.2006 14:12 |
| [PHP] Erstellung und Bearbeitung von Bildern mittels PHP | WarrenFaith | Tutorials | 1 | 23.08.2005 15:30 |
| [PHP] Kontrollstrukturen in PHP | Jann Hendrik | Tutorials | 7 | 09.12.2004 21:28 |