Upload mehrerer dateien mittels ftp?

Alles, was PHP betrifft, kann hier besprochen werden.

Upload mehrerer dateien mittels ftp?

Postby mconster » 10. August 2008 23:00

hallo! Folgende frage. hoffe dass man mir wieder helfen kann :lol:
habe vor uploadscript zuschreiben, das drei (z.b.) gleichzeitig uploaded kann. die übertragung auf den server soll mittels ftp geschehen, da es sich um event. um größere dateien handeln könnte.
den upload mit ftp hab ich bereits realisiert.

Code: Select all
<form action="<?php $PHP_SELF?>" method="post" enctype="multipart/form-data">
<input type="file" name="datei"><br>
<input type="submit" value="Hochladen" name="submit">
</form>
<?php
// error_reporting(E_ALL);
if (isset($_POST[submit]))
{
include("mysql_data.php");
mysql_select_db("db");
$inquiry="SELECT * FROM ftplogin";
$result=mysql_query($inquiry);
$row=mysql_fetch_row($result);
mysql_close($db);   

$ftp_server = $row[0]; // erste spalte ftp-server
$ftp_user_name = $row[1]; //zweite spalte username
$ftp_user_pass = $row[2];  //dritte spalte password 
$local_file=$_FILES[datei][tmp_name];
$destination_file = 'datei_ftpupload'.'.php';
   
   $conn_id = ftp_connect($ftp_server);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    $upload = ftp_put($conn_id, $destination_file, $local_file, FTP_BINARY);
    ftp_close($conn_id);
}
?>


das funkt. auch. wie mach ich jetzt einen ftpupoad mit mehreren dateien?
mconster
 
Posts: 13
Joined: 05. August 2008 22:51

Postby deepsurfer » 11. August 2008 02:44

Stellt sich erstmal die Frage ob der FTPserver auch mehrere Zeitgleiche Uploads unterstützt.

Falls nicht, dann dein Script dahin erweitern das er in dem Eingabe Formular mehrere Dateinamen "aufnimmt" und diese nach einander über den FTPconnect hinaufschiebt, dabei halt nur prüft ob der laufende Upload noch aktiv ist (prüfung vor dem ftp_close($conn_id)), wenn nicht dann das nächste File hinaufjagen.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Nobbie » 11. August 2008 11:30

Seltsames Script - erst lädst Du via HTTP eine Datei auf Deinen Server hoch, dann wird diese Datei noch einmal auf einen weiteren Server via FTP weitergeladen.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Postby deepsurfer » 11. August 2008 12:36

Hätte den vorteil das bei möglichen Verbindungsabrüchen man mit gewissen Prüfverfahren unabhängig vom User den Upload via FTP automatisiert.

Ist aber nur ein Gedanke der mir gerade so herumschwirrt, mal schaun was der ~mconster~ dazu schreibt.
chirio Deep
Wie sagte einst der MCP aus Tron auf dem Bildschirm zu schreiben Pflegte
" ... end of communication ... "
User avatar
deepsurfer
AF Moderator
 
Posts: 6440
Joined: 23. November 2004 10:44
Location: Cologne
Operating System: Win-XP / Win7 / Linux -Debian

Postby Xardas der Dunkle » 11. August 2008 17:39

Seltsames Script - erst lädst Du via HTTP eine Datei auf Deinen Server hoch, dann wird diese Datei noch einmal auf einen weiteren Server via FTP weitergeladen.

Why not? Webserver muss nicht immer gleich dem Fileserver sein.

Zum Script, erstmal solltest du die Fehler in dem obigen Script beheben.
Code: Select all
<?php $PHP_SELF?>

Das geht schon mal gar nicht. Register_globals gehört eh in die Tonne getreten und <?php allein gibt auch nix, aus.
Entweder muss da: <?php echo $_SERVER['PHP_SELF']; ?> stehen oder dieses grausame Konstrukt: <?= $_SERVER['PHP_SELF'] ?> (Letzteres ist eindeutig nicht zu empfehlen).

Code: Select all
if (isset($_POST[submit]))

Da wachsen mir auch graue Haare, wer hat diese Unsitte eigentlich in die Welt gesetzt? Strings gehören immer in Anführungszeichen und somit auch Textschlüssel.
Code: Select all
if (isset($_POST['submit']))

Für das:
Code: Select all
$local_file=$_FILES[datei][tmp_name];

gilt das selbe ...

Und einrücken währe auch nicht schlecht.
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby mconster » 11. August 2008 20:15

hallo! danke erst mals für die antworten...
@Xardas der Dunkle
das mit dem <?php echo $_SERVER['PHP_SELF']; ?> werd ich mir auf jeden fall angewöhnen und die ' ' beim $_POST[''] werd ich mir auch angewöhnen ;-)

also ich hab das problem mittlerweile nach intensiven suchen und herum gegoogeln gelöst auch wenn ich nicht weiß ob das so elegant ist. funktioniert aber...

so zuerst hab ich herausgefunden dass man mit arrays mehrere uploads hinbekommt.

Code: Select all
$_FILE['neuedatei']['tmp_name'][] statt nur $_FILE['neuedatei']['tmp_name']


das war eigentlich das schwierigste für mich herauszubekommen :oops: peinlich..

so nun zum script.
zuesrt das formular
Code: Select all
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
<input type="file" name="datei[1]"><br> // hier liegt der entscheidente PUNKT ;-)
<input type="file" name="date[2]"><br>
<input type="submit" value="Hochladen" name="submit">
</form>


ok als nächste schritt das php script (ausnahmsweise jetzt ohne ' ' ;-) :
Code: Select all
if (isset($_POST[submit]))
{
include("mysql_data.php");
mysql_select_db("db");
$inquiry="SELECT * FROM ftplogin";
$result=mysql_query($inquiry);
$row=mysql_fetch_row($result);
mysql_close($db);   

for ($up_nr=1;$up_nr<=2;$up_nr++)
   {   
   if ($_FILES[datei][type][$up_nr]=='image/jpeg')
      {
     $ftp_server = $row[0]; // erste spalte ftp-server
     $ftp_user_name = $row[1]; //zweite spalte username
     $ftp_user_pass = $row[2];  //dritte spalte password
     $local_file=$_FILES[datei][tmp_name];
     $destination_file = 'datei_ftpupload'.'.php';
   
    $conn_id = ftp_connect($ftp_server);
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    $upload = ftp_put($conn_id, $destination_file, $local_file, FTP_BINARY);
    ftp_close($conn_id);
      }
   else
   {
      // irgendwo hier könnte noch ein phpcode stehen der anschließend wieder alle files vom server löscht wenn man in diese bedienung hineinkommt
   $fehlermeldung.='Bild-Nr. '.$up_nr.' hat <b>nicht</b> das format jpeg! Bitte wiederholen Sie den Uploadvorgang!';break;
   }
   }
}
?>

okok ich weiß ich hab einfach mit einer for-schleife jedes mal eine ftp-verbindung eröffnet, das gerade zu bearbeitende file auf den server laden lassen und die verbindung wieder getrennt. DANKE FÜR DEN DENKANSTOSS deepsurfer.... somit ist auch nicht gleichzeitig. müsste jetzt nur noch ein script schreiben, das überprüft ob auch wirklich alle files also von 1.jpeg bis n.jpeg auf den server geladen wurden. denke das wird nicht so ein problem sein.
ich weiß auch das der zweier beim for ($up_nr=1;$up_nr<=2;$up_nr++) ein bisschen dumm aussieht. das script wird aber dann "dynamischer werden" statt der 2 kommt dann ein $_SESSION[''] die von der eingabe des users abhägt. aber das sollte ich schon irgendwie packen... danke vielmals ihr meine php-freunde[/b]
mconster
 
Posts: 13
Joined: 05. August 2008 22:51

Postby Wiedmann » 11. August 2008 21:20

Code: Select all
<input type="file" name="datei[1]"><br> // hier liegt der entscheidente PUNKT ;-)
<input type="file" name="date[2]"><br>

Hier kannst du auch einfach die Zahlen weglassen:
Code: Select all
<input type="file" name="datei[]"><br>
<input type="file" name="date[]"><br>


ok als nächste schritt das php scrip

Könnte man auch einfach so machen:
Code: Select all
include 'mysql_data.php';
mysql_select_db('db');
$result = mysql_query('SELECT * FROM `ftplogin`')
          or die(mysql_error());
$row = mysql_fetch_row($result);

if (isset($_FILES['datei']['error']) {
    foreach ($_FILES['datei']['error'] as $key => $error) {
        if ((UPLOAD_ERR_OK == $error) &&
            ('image/jpeg' == $_FILES['datei']['type'][$key])) {
            copy($_FILES['datei']['tmp_name'][$key],
                 "ftp://{$row[1]}:{$row[2]}@{$row[0]}/{$_FILES['datei']['name'][$key]}");
        }
    }
}

(oder wolltest du wirklich alle Bild unter dem selben Namen "datei_ftpupload.php" auf den Server kopieren?)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby mconster » 11. August 2008 21:36

wooow so kurz!! :lol:

Wiedmann wrote:(oder wolltest du wirklich alle Bild unter dem selben Namen "datei_ftpupload.php" auf den Server kopieren?)


nein hab mich vertippt bzw. vergessen sollte egentlich von 1.jpeg weg gehen. also so:
Code: Select all
.....
 $destination_file = $up_nr.'.jpeg';
...

danke wiedmann für die tipps ;-) werde schauen ob ich daraus was machen kann....
mconster
 
Posts: 13
Joined: 05. August 2008 22:51

Postby Nobbie » 11. August 2008 21:44

Xardas der Dunkle wrote:Why not? Webserver muss nicht immer gleich dem Fileserver sein.


Natürlich nicht - aber bei den hier vorhandenen rudimentären Programmierkenntnissen ahne ich ja, dass das Script momentan lokal läuft, später wahrscheinlich auf einem Webserver laufen soll, der aber gleichzeitig der FTP Server ist (wäre bei weitem nicht der erste, der die PHP/FTP Schnittstelle falsch verstanden hat).

Und dann wäre es alles Quatsch.

Aber - warten wir einfach ab.

P.S.: Momentan (lokal) ist es auch Quatsch, weil es nichts bringt, lokale Dateien via HTTP lokal "hochzuladen".
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Postby mconster » 11. August 2008 22:56

Nobbie wrote:
Xardas der Dunkle wrote:Why not? Webserver muss nicht immer gleich dem Fileserver sein.


Natürlich nicht - aber bei den hier vorhandenen rudimentären Programmierkenntnissen ahne ich ja, dass das Script momentan lokal läuft, später wahrscheinlich auf einem Webserver laufen soll, der aber gleichzeitig der FTP Server ist (wäre bei weitem nicht der erste, der die PHP/FTP Schnittstelle falsch verstanden hat).

Und dann wäre es alles Quatsch.

Aber - warten wir einfach ab.

P.S.: Momentan (lokal) ist es auch Quatsch, weil es nichts bringt, lokale Dateien via HTTP lokal "hochzuladen".

:(
hast du vielleicht eine andere idee wie ich z.b. eine über 10MB datei auf einem server laden soll?
upload_max_filesize = 2M in der php.ini zu verändern hat nicht wirklich funktioniert.....
lg
mconster
 
Posts: 13
Joined: 05. August 2008 22:51

Postby Wiedmann » 11. August 2008 23:26

hast du vielleicht eine andere idee wie ich z.b. eine über 10MB datei auf einem server laden soll?
upload_max_filesize = 2M in der php.ini zu verändern hat nicht wirklich funktioniert.....

?

Duch das Formular hast du die Datei doch schon auf den Server upgeloaded. Und hier greift auch schon upload_max_filesize (ist ja eine PHP Einstellung).

Bei deinem Script wird ja dann die schon hochgeladene Datei nochmal auf einen weiteren FTP-Server kopiert. Und wenn der FTP-Server der Selbe ist wie der Webserver (wo das Script läuft), ist das ja absolut unnötig (die Datei ist ja schon da)
Wiedmann
AF Moderator
 
Posts: 17102
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby mconster » 12. August 2008 00:24

Wiedmann wrote:
hast du vielleicht eine andere idee wie ich z.b. eine über 10MB datei auf einem server laden soll?
upload_max_filesize = 2M in der php.ini zu verändern hat nicht wirklich funktioniert.....

?

Duch das Formular hast du die Datei doch schon auf den Server upgeloaded. Und hier greift auch schon upload_max_filesize (ist ja eine PHP Einstellung).

Bei deinem Script wird ja dann die schon hochgeladene Datei nochmal auf einen weiteren FTP-Server kopiert. Und wenn der FTP-Server der Selbe ist wie der Webserver (wo das Script läuft), ist das ja absolut unnötig (die Datei ist ja schon da)


eigentlich hab ich vor die files teilweise auf einem anderen server zu laden... hab nur irgendwo mal gelesen dass man bei großeren dateien auf ftp zurückgreifen sollte... naja wenns eh mit formular geht....
mconster
 
Posts: 13
Joined: 05. August 2008 22:51

Postby Nobbie » 12. August 2008 10:46

Genau was ich geahnt habe...

So funktioniert das nicht. Wenn Du ein wenig mehr über Deine (geplante?) Umgebung/Anwendung erzählst, können wir sicherlich Tipps geben, wie man das richtig in die Tat umsetzt.
Nobbie
 
Posts: 13183
Joined: 09. March 2008 13:04

Postby mconster » 12. August 2008 23:33

Nobbie wrote:Genau was ich geahnt habe...

So funktioniert das nicht. Wenn Du ein wenig mehr über Deine (geplante?) Umgebung/Anwendung erzählst, können wir sicherlich Tipps geben, wie man das richtig in die Tat umsetzt.


ok sorry! ich denke dass ich jetzt mit all euren tipps im wesentlichen alles zusammen bekommen habe. meine anwendung funktioniert eigentlich GENAU so wie ich es haben möchte und ich sehe mittlerweile auch noch gravierenden sicherheitsmängel oder sonstige nachteile meines script für mich... natürlich gehört alles noch ausgetestet. vielleicht ergeben sich dann noch ein paar schwierigkeiten für mich.
schönen abend!
mconster
 
Posts: 13
Joined: 05. August 2008 22:51


Return to PHP

Who is online

Users browsing this forum: No registered users and 10 guests