Zitat von
Luckie:
Das wollte mir auch alle bei ftp_put erklären und haben gesagt, das Script hätte keinen Zugriff auf meinem lokalen Rechner, um die Datei hochzuladen, letzt endlich ging es aber doch. Also muss es auch andersrum gehen. Ich habe nur noch nicht rausgefunden, was ich anders bzw. falsch mache.
Außerdem steht da ja:
Zitat:
Liest eine Datei von einem
FTP-Server und speichert sie lokal (download)
Und lokal bedeutet für mich: 'hier bei mir und nicht auf dem Sever, wo das Script läuft'. Desweiteren habe ich schon Scripte gesehen und ausprobiert, die das auch konnten. Nur leider kann ich nicht nachvollziehen, was die anders machen als ich.
Also hört auf mir zu erzählen, dass das nicht ginge.
Wenn dir
alle etwas anders erzählen, solltest du vielleicht mal anfangen nachzudenken...
Zitat von
Luckie:
OK, gegenbeweis, hier mein Upload-Code:
Code:
function upload_file($dest, $source, $mode)
{
$conn = ftp_connect(SERVER);
ftp_login($conn, USER, PW);
$result = ftp_put($conn, $dest, $source, $mode);
ftp_close($conn);
return $result;
}
Code:
echo '<h3>Upload file</h3>';
echo '<p>';
if ($_FILES['uploadfile']['size'] < $MAX_FILE_SIZE)
{
if (!@upload_file('/'.$newpath.'/'.$_FILES['uploadfile']['name'], $uploadfile, FTP_BINARY))
{
echo 'Error!'.'<br>';
echo 'File <i>'.$_FILES['uploadfile']['name'].'</i> could not be saved in <i>'.$newpath.'</i>';
echo $_FILES['uploadfile']['error'];
}
else
{
echo 'File <i>'.$_FILES['uploadfile']['name'].'</i> successfully saved in <i>'.$newpath.'</i><br>';
}
}
else
{
echo 'The filesize of '.$_FILES['uploadfile']['name'].' ('.format_filesize($_FILES['uploadfile']['size']).') exceeds the allowed filesize of '.format_filesize(MAX_FILE_SIZE);
}
Nichts mit
move_uploaded_file .
Und es soll ein WebFTP Client für mich werden und es gibt Verzeichnisse außerhalb des Documentroot-Folders, an die ich mit dem Browser nicht drankomme, aber mit einem
FTP-Client. Und an die möchte ich natürlich auch mit meinem WebFTP Client drankommen.
Desweiteren bedeutet bei
ftp_put lokal auch wirklich lokal:
Zitat:
int ftp_put ( int ftp_stream, string remote_file, string local_file, int mode )
Und es sind ja explizit
FTP-Funktionen, also es ist das
FTP Protokoll, was dazu geschaffen wurde Dateien
zwischen Rechnern auszutauschen.
Sicher geht das, du lädst ja etwas
von deinem Server (dem
FTP-Client)
auf deinen Server (dem
FTP-Server). Wenn in der PHP-Dokumentation "lokal" steht, dann meinen die den Rechner, auf dem PHP ausgeführt wird.
Jetzt noch einmal ausführlich von Jemandem, der seit ~3 Jahren richtig große Web-Applikationen mit PHP schreibt (> 50.000 Zeilen):
Wenn du einen Form-Based-File-Upload machst, also
Code:
<form method="post" action="meinscript.php">
<input type="file" ...>
</form>
und man damit eine Datei auswählt und das Formular abschickt, dann wird der Inhalt der Datei zusammen mit der Anfrage an deinen Webserver geschickt.
Die Datei ist also schon auf dem Server wenn dein Skript ausgeführt wird.
Die Funktion
move_uploaded_file dient nur dazu, die dafür angelegte temporäre Datei an die endgültige Position zu verschieben. Darum bekommt diese Funktion als Parameter auch die Namen von zwei Dateien
auf deinem Server und nicht den ersten von deinem lokalen Rechner.
Wenn es anders nicht ginge, meinst du nicht dann gäbe es schon 1.000 Skripte für das, was du zu implementieren versuchst?
Ich muss jetzt los - wenn du es immer noch nicht glaubst, dann schreibe ich dir nachher ein kleines Skript...
@ripper8472: Bestärke ihn doch nicht noch in seinem Irrglauben, es ginge nur über eine
FTP-Verbindung.