PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP-FTP-Upload--- Probleme mit der Variablenübergabe



Bellerophon
25-05-2004, 15:47
Hallo,

ich hab ein kleines Script geschrieben, mit dem via FTP Dateien auf einen Server gepackt werden sollen. Das funktioniert auch eigentlich, leider klappt bei der Übergabe der Form-Variablen etwas nicht. Undzwar erhällt PHP aus der "<Input type='file' ...>" nur den Dateinamen, nicht den lokalen Pfad. Deshalb findet das Script die Datei dann auch nicht! In einigen Tutorial (Selfhtml usw...) wird empfohlen, den enctype auf multipart/form-data zu setzen. Dann erhällt PHP gar nichts mehr aus der Datei... Hier erstmal mein Script:

<HTML>
<BODY>
<FORM action="ftp_put.php" method="post" enctype="multipart/form-data">
<INPUT type="file" size="100" name="filetoput"><BR>
<INPUT type="submit" value="upload">
</FORM>
</BODY>
</HTML>

<?PHP
$filetoput=$_POST[filetoput];
if ($filetoput <>" ") {
$my_user="XXXXX";
$my_pwd="XXXXX";
$my_host="XXX.XXX.XXX.XX";
$ftp = ftp_connect($my_host);
if ( ! $ftp) {
echo "Keine Verbindung zum Host <b>".$my_host."</b><br>";
}
else {
$res = @ftp_login($ftp,$my_user,$my_pwd);
if (! $res) {
echo "Login als <b>".$my_user."</b> nicht möglich!<br>";
}
}
$wheretoput="/www/htdocs/test/daten/".basename($filetoput);
// Hier geb ich die Variablen mal testweise aus. Ohne enctype="multipart/form-data"
// kommt hier wenigstens der Dateiname von $filetoput raus... Mit kommt garnichts!!!
echo $ftp."<br>".$wheretoput."<br>".$filetoput;
ftp_put($ftp,$wheretoput,$filetoput,FTP_BINARY);
ftp_quit($ftp);
}
else {
echo "Ein fehler ist aufgetreten";
}
?>

Als Fehlermeldung gibt mir PHP ftp_put(): error opening bla bla weil er die Datei nicht findet. Wenn ich der Variable $filetoput den noch den richtigen Pfad mitgebe, funktionierts. Aber das kann ja nicht die Lösung sein... Im Formular (also auf der Seite) ist der Pfad auch noch da (z.B. c:/test.txt oder /home/xxx/test.txt) die Variable spuckt aber nur test.txt aus. Mir kommt das vor, als wäre hier ein basename($filetoput) am werke, welches hier aber nirgendwo steht...

Vielleicht hat ja jemand von euch ne Idee woran das liegen könnte??? Ich verzweifel gerade!

Danke im Vorraus
Thomas

Gaert
25-05-2004, 16:02
Das Skript macht in Zusammenhang mit einem <input type="file" ... > überhaupt keinen Sinn... du speicherst ja überhaupt nichts auf dem Server!

Kann es sein, dass du den Upload Vorgang mit PHP nicht ganz kapiert hast...

Lies dir mal das hier mal bitte durch und stell danach nochmal ne Frage:
http://de.php.net/manual/de/features.file-upload.php

Bellerophon
25-05-2004, 16:13
Aber das Script funktioniert so wie es ist (in Anlehnung an das Script S. 355 im Buch PHP4 von Uwe Hess und Günther Karl). Nur nimmt die $_POST(filetoput) alle Pfadangaben weg. Da auf dem Server, auf den hochgeladen werden soll eh ein FTP-Server lauscht, fände ich es ziemlich nett, wenn das damit gehen würde. Wo liegt denn der Fehler? (Wie bereits oben erwähnt... Mit im Script angegebenen Pfadangaben läuft das ding wunderwar).

Thomas

Gaert
25-05-2004, 16:38
Das Skript kann so garnicht funktionieren...

Mal kurz erläutern, was du überhaupt tun willst:

Client lädt Datei per HTTP PUT auf Server 1 hoch, Server 1 lädt Datei per FTP PUT auf Server 2 hoch...

Der erste Schritt fehlt bei dir!

Das einzige, was ich mir erklären könnte, wäre, dass Client und Server 1 bei dir ein und dieselbe Maschine ist... dann kommst du über $_FILES['userfile']['name'] an den Dateinamen und nicht über $_POST[filetoput] (das ist nämlich bei einem input type file nur der Dateiname ohne den Pfad).

Bellerophon
25-05-2004, 16:45
OkOk, jetzt wird einiges klarer. Das Script hat auch auf einem anderen Rechner funktioniert, aber nur wenn ich die per $_POST geholte Variable mit z.B.
$filetoput2="c:\".$filetoput ergänzt, also im Script noch den Pfad angehängt habe. Dann läd er die Datei via FTP vom Client auf den Server. Es gibt also keine Möglichkeit, per inputform den kopletten Pfad zu bekommen?

Thomas

PS: Das Buch von dem ich eben schrieb scheint ziemlich fehlerlastig zu sein...

sticky bit
26-05-2004, 16:37
Original geschrieben von Gaert
Client lädt Datei per HTTP PUT auf Server 1 hoch, ...
<klugscheissmodus>
Es bleibt ein POST... Ein Server der PUT in the wild zulässt dürfte ohnehin schwer zu finden zu sein...
</klugscheissmodus>

Pingu
26-05-2004, 19:22
Original geschrieben von Bellerophon
Es gibt also keine Möglichkeit, per inputform den kopletten Pfad zu bekommen?
Doch. Wo und wie steht genau auf der Seite, die Dir Gaert schon empfohlen hat.

Pingu

Gaert
27-05-2004, 14:58
Original geschrieben von sticky bit
<klugscheissmodus>
Es bleibt ein POST... Ein Server der PUT in the wild zulässt dürfte ohnehin schwer zu finden zu sein...
</klugscheissmodus>
Konstruktive Kritik, immer willkommen - war ein freudscher Versprecher meinerseits :cool: ...