Upload auf Downloadserver per script
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
beste idee
code
dank
datei
direkte ftp
fehler
file
ftp
legen
leute
log
paar
pfad
post
programm
realisieren
server
target
verbindung
-
Hi
ich stehe gerade vor folgendem Problem: Ich möchte zum Datentausch zwischen mir und n paar anderen Leuten gern ein Script einrichten mit dem diese Daten auf meinen Downloadserver hochladen können (auf dem Webspace sind ja nicht alle typen erlaubt)...
Meine Frage ist jetzt, ob es erlaubt ist die Datei über ein normales Script temporär auf den Webspace zu legen und von dort direkt per FTP auf den downloadserver zu legen um dann die Datei auf dem Webspace sofort wieder zu löschen bzw. ob ihr eine Möglichkeit wisst, die den Regeln entsprechen würde, mit der ich das Realisieren könnte.
Danke schonmal
Dustboy -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hi.
Das funktioniert mit Php. Es gibt Funktionen, die es ermöglichen eine direkte FTP-Verbindung zum Downloadserver aufzubauen. Google einfach mal nach php + ftp, dann solltest du die entsprechenden Funktionen finden. -
Ja soweit bin ich mir dessen bewusst, nur müsste ich doch die Datei temporär auf dem Webspace speichern? Mein prob is dass ich nich weiß ob es erlaubt is....
-
Nein musst du nicht. Nur das PHP-Skrip muss auf den Webserver. Das baut aber eine direkte FTP-Verbindung vom User zum Downloadserver auf, was bedeutet, dass die Uploads direkt auf dem Downloadserver landen und nicht auf den Webspace zwischgespeichert werden.
kleines Beispiel:
@$ftp=ftp_connect(FTP_HOST,FTP_PORT); //FTP_HOST, FTP_PORT sind von dir definierte konstanten mit zugangsdaten @$log=ftp_login($ftp,FTP_USER,FTP_PASS); // FTP_USER, FTP_PASS wie oben @$pa=ftp_pasv($ftp,true); // nötig, falls eine firewall die verbindung blockiert if ($log && $ftp && $pa) { @$daa=ftp_nlist($ftp,$target); // auflistung aller dateien im ordner $target auf dem server if (!is_array($daa) || in_array($target.$file,$daa)) { //$file ist der dateiname des uploads, siehe $_FILE-array echo "<p><b>Fehler:</b> Es existiert bereits eine Datei mit gleichem Namen im Zielverzeichnis.</p>"; } else { @$chdr=ftp_chdir($ftp,$target); //wechsel ins gewünschte verzeichnis $target if ($chdr) { @$fp=fopen($filepath,'r'); //$filepath ist der pfad zur quelldatei bzw zum temporären bild davon. siehe $_FILE if ($fp) { @$ret=ftp_nb_fput($ftp,$file,$fp,FTP_BINARY); while ($ret==FTP_MOREDATA) { //FTP_MOREDATA ist eine konstate aus der ftp-klasse von php @$ret=ftp_nb_continue($ftp); } if ($ret!=FTP_FINISHED) { //FTP_FINISHED siehe FTP_MOREDATA echo "<p><b>Fehler:</b> Die Datei konnte nicht hochgeladen werden.</p>"; } else {echo "<p>Die Datei ".$file." wurde erfolgreich hochgeladen.</p>";} @fclose($fp); } else {echo "<p><b>Fehler:</b> Die Quelldatei konnte nicht geöffnet werden.</p>";} } else {echo "<p><b>Fehler:</b> Das Zielverzeichnis konnte nicht geöffnet werden.</p>";} } } else {echo "<p><b>Fehler:</b> Die FTP-Verbindung konnte nicht hergestellt werden.</p>";} @ftp_close($ftp);
Natürlich fehlen da noch ein paar Dinge, z.b. Dateigrößenabfrage, Mimetypes usw aber das bekommst du sicher selbst hin, oder? Aber wie du siehst, wird direkt eine Verbindung vom User zum Server per FTP aufgebaut. Welcher Server das ist, entscheidest du. Also kannst du dich auch direkt mit dem Downloadserver verbinden lassen, ohne über den Webserver zu gehen. Noch ein Wort zu $file und $filepath: Die bekommst du natürlich von einem Formular, welches wie folgt aussehen kann:
<form enctype=\"multipart/form-data\" action=\"uploadskript.php\" method=\"post\">Datei auswählen: <input name=\"uploaded\" type=\"file\" /> <input type=\"submit\" value=\"hochladen\" /></form>
Nach dem Absenden findest du den Dateinamen, den temporären Pfad auf dem Pc des Users, den Mimetype usw im Array $_FILE['uploaded'] und kannst dir von da alle Infos zusammensammeln.
Beitrag zuletzt geändert: 1.2.2010 11:23:40 von alphara -
Ok. Ich dachte damit, dass die Datei in der Variable $_FILE['uploaded'] gespeichert wird ist sie automatisch auf dem Webspace ausgelagert. Wenn das nicht so ist kann ich das ja beruhigt machen. Danke dir =)
-
dustboy schrieb:
Ok. Ich dachte damit, dass die Datei in der Variable $_FILE['uploaded'] gespeichert wird ist sie automatisch auf dem Webspace ausgelagert. Wenn das nicht so ist kann ich das ja beruhigt machen. Danke dir =)
Du hast recht und alphara nicht.
Bei Uploads werden die Dateien immer per POST übertragen und laden auf dem Webspace. Erst dann wird eine Verbindung zum FTP-Server hergestellt und die Datei nach da verschoben.
Zu deiner eigentlichen Frage: Du musst ausprobieren, ob sich gesperrte Dateitypen überhaupt hochladen lassen, denn per Filemanager ist das gar nicht möglich und per FTP werden die Dateien automatisch nach 1 - 24 h gelöscht. Insofern kann ich dir nur raten, es zu versuchen und wenn es geht, sehe ich dabei kein Problem. -
Ok, habs nochmal nachgelesen, tct hat recht. Ich dachte, die file landet erst mit move_uploaded_file() per post auf dem Server. Ist offensichtlich falsch, sry. Du kannst das ganze aber auch offline per Xampp oder so laufen lassen, dann gehts trotzdem auf den Downloadserver und wird nicht auf dem Webserver zwischengespeichert. Dann musst du aber allen Leuten das Uploadskript zukommen lassen (oder als Java-Programm schreiben, dann brauch nicht jeder auch noch das Xampp).
Beitrag zuletzt geändert: 1.2.2010 20:24:58 von alphara -
Ok. Dann ist das mit dem Java-Programm wohl die beste Idee. Mal schaun was ich da realisieren kann...
Danke euch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage