Upload von binären Dateien mittels PHP und FTP
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bekannten sprache
bewegen
bild
browser
code
datei
file
formular
ftp
hoch laden
http
import
installieren
laden
server
testen
text
url
verwenden
zugriff
-
Hi, ich will ein Bild (genauergesagt eine Reihe von Bildern) ohne ein FTP-Programm von heimischen PC auf den Lima-Webspace laden. In den Ordner "images" (der im Moment noch nicht existiert, werde ihn aber noch erstellen). Das soll ein regelmäßiger Vorgang sein, deswegen will ich kein FTP-Programm, sondern ein PHP-Script verwenden. Die Namen aller Bilddateien werden in einem Array gespeichert sein. Ein Code existiert noch nicht.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das geht über ein Formular.
Schau Dir das http://www.php-einfach.de/tuts_php_datei_upload.php dazu an.
Gruß -
tom-moeller schrieb:
Das geht über ein Formular.
Schau Dir das http://www.php-einfach.de/tuts_php_datei_upload.php dazu an.
Gruß
Das ist ein Upload-Formular auf den Server, auf dem sich das Script befindet. Es soll aber per FTP geschehen.
Beitrag zuletzt geändert: 5.10.2009 15:26:55 von das-koenigreich -
Ich bezweifle, dass hierfür PHP das Mittel der Wahl ist.
Das Script muss ja auf deinem Client laufen, da er ja alle 24-h eine neue IP hat und somit der Server ihn nicht finden kann. Desweiteren müsstest du - falls du wirklich vom Server aus die Bilder vom Client ziehen willst - dich um Themen wie NATting und IP-Forwarding kümmern.
Um PHP auf deinem Client auszuführen, müsstest du erstmal PHP auf diesem Client installieren. Das kannst du natürlich machen, aber es gibt noch viele andere Möglichkeiten. Ich persönlich würde dir zu python, ruby oder schlicht und ergreifend zu bash raten. Wenn du das ganze dann noch als cron-job (oder dem Windows-Äquivalent) laufen lässt, geschieht alles vollautomatisch.
Das Script sähe in der Sprache deiner Wahl wie folgt aus (nur Pseudocode):
connect_to_ftp_server if not connected error "Kann nicht zum Server verbinden." exit for each file in imagefolder put_onto_ftp_server file disconnect_from_ftp_server exit
-
Es gibt einen Clienten, nämlich mich. Ansonsten hat niemand Zugriff darauf. Ich weis, dass man per FTP etwas auf einen Server laden kann, und dazu PHP verwenden kann. Nur wie das geht, weis ich leider nichtmehr.
-
Das Problem ist folgendes:
Er führt auf dem Web-Server ein PHP-Script aus, dass sich mit einem FTP-Server verbindet. Schön und gut. Und wie kommen nun die Bilder von seinem Client auf den Webserver? Da beißt sich die Maus doch in den eigenen Schwanz. Den Schritt über den Webserver mit PHP komplett weglassen und direkt vom Client auf den FTP-Server laden.
EDIT:
Hier ein python-Skript, dass dir alle Dateien eines lokalen Ordners (in diesem Beispiel /home/user/Bilder) auf einen FTP-Server hochlädt in das Verzeichnis img:
import os from ftplib import FTP dir = "/home/user/Bilder/" ftp = FTP("ftp.provider.com") ftp.login("user", "password") ftp.cwd("img") lst = os.listdir (dir) for file in lst: handle = open(dir + file, "r") ftp.storbinary("STOR " + file, handle) handle.close () ftp.quit()
Beitrag zuletzt geändert: 5.10.2009 15:51:04 von census -
Aso, ich hab das falsch verstanden. Dachte er hat bei sich PHP installiert und will damit über FTP etwas hoch laden, weil er lieber mit einer ihm bekannten Sprache arbeitet, als eine andere, wie Python zu lernen, die wiederum eine Installation benötigen würde. Der Server kann den Client natürlich nicht dazu bewegen Dateien hoch zu laden.
-
Python war ja auch nur einer von vielen Vorschlägen. Ob python, ruby, PHP, LUA, perl oder Schlagmichtot ist ja auch egal. Ich hatte nur die Befürchtung, dass Königreich serverseitiges PHP meinte (da das ja in 98% der Fälle der Fall ist). Wenn er natürlich auch lokal PHP bevorzugt, perfekt. Aber python ist halt bei den meisten Distros dabei und bei Windows ist es egal, ob man nun PHP oder python installiert.
Hier nochmal das fertige Script, damit es nicht im Thread untergeht:
import os from ftplib import FTP dir = "/home/user/Bilder/" ftp = FTP("ftp.provider.com") ftp.login("user", "password") ftp.cwd("img") lst = os.listdir (dir) for file in lst: handle = open(dir + file, "r") ftp.storbinary("STOR " + file, handle) handle.close () ftp.quit()
-
nikic schrieb:
Aso, ich hab das falsch verstanden. Dachte er hat bei sich PHP installiert und will damit über FTP etwas hoch laden, weil er lieber mit einer ihm bekannten Sprache arbeitet, als eine andere, wie Python zu lernen, die wiederum eine Installation benötigen würde. Der Server kann den Client natürlich nicht dazu bewegen Dateien hoch zu laden.
Du hast alles richtig verstanden. Ich will im Browser eine Seite http://localhost/script.php öffnen, dieses PHP-Script verbindet dann mit einem Server, und läd Dateien hoch.
nikic schrieb: Moin, vielleicht interessiert dich das: PHP - FTP. Insb. ftp_connect(), ftp_login() und ftp_put(), sowie ftp_mkdir(). Das erfordert aber, dass PHP Zugriff auf die Dateien hat. Automatisieren kannst dus mit einem Cronjob/Service.
Genau das suche ich, nur gibt es da glaube ich ein Problem, weil es sich um Nicht-Text-Dateien handelt. Das suche ich als Codebeispiel. -
das-koenigreich schrieb:
Du hast alles richtig verstanden. Ich will im Browser eine Seite http://localhost/script.php öffnen, dieses PHP-Script verbindet dann mit einem Server, und läd Dateien hoch.
Also, du willst bei dir auf deinem Rechner einen Webserver installieren, um dann über CGI oder ISAPI an PHP heranzutreten, um von dort per FTP Bilder ins Internet hochzuladen. Seh ich das richtig?
Warum denn über 5 Umwege? -
census schrieb:
das-koenigreich schrieb:
Du hast alles richtig verstanden. Ich will im Browser eine Seite http://localhost/script.php öffnen, dieses PHP-Script verbindet dann mit einem Server, und läd Dateien hoch.
Also, du willst bei dir auf deinem Rechner einen Webserver installieren, um dann über CGI oder ISAPI an PHP heranzutreten, um von dort per FTP Bilder ins Internet hochzuladen. Seh ich das richtig?
Warum denn über 5 Umwege?
Ganz einfach: Weil der PHP-Server schon installiert ist.
Sehe ich das richtig, dass ich einfach nur als Upload-Mode "FTP_BINARY" anstatt dem normalen "FTP_ASCII" verwenden muss? -
nikic schrieb:
Jop, das hast du richtig erkannt. Binary für nicht-Text-Dateien.
PS: Villeicht solltest du ftp_nb_put testen, wenn die Files seeeehr groß sind, damit das nicht blockt ;)
Ich denke, dass ftp_put() besser ist, da viele Dateien direkt hintereinander hochgeladen werden. Es läuft nämlich so ab, dass der Upload ganz unten in der Datei steht, und die ganze Verarbeitung findet oben statt. Oben wird ein Array erstellt, dass viele Bildernamen enthält. Mit Hilfe einer Foreach-Schleife wird dann jedes Bild hochgeladen. Wenn die alle gleichzeitig hochgeladen werden würden (wie es ftp_nb_put testen() machen würde), dann würde beim Abbruch des Scripts keine Datei vollständig hochgeladen werden, sondern alle nur zur Hälfte. Bei ftp_put() ist dann die Hälfte ganz oben, und die andere Hälfte garnicht. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage