Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP und FTP



Frank#
11-01-2005, 13:19
Hallo,

ich hab mich nach längerem überlegen dazu durchgerungen über php FTP uploads anzubieten. Ich hab eine Datenbank mit Usern (id, gid, chroot verz. usw)

Im Prinzip könnten sich die User per anmeldebox einloggen und dann einen Upload starten oder downloaden.

Leider habe ich kaum eine Idee wie ich das anpacken könnte. Über hilfreiche Tipps würde ich mich sehr freuen.

viele Grüsse
Frank

Gaert
11-01-2005, 13:47
Hallo Frank#,

ganz so wie du dir das vorstellst wird das nicht funktionieren...
Die FTP Funktionalität von PHP beschränkt sich eigentlich auf Client Funktionen, d.h. du kannst mit PHP Skripten Dateien auf einen FTP Server hochladen.
Hier gibts die Funktionen: http://de2.php.net/ftp
Natürlich ist es auch möglich einen FTP Server mit PHP zu programmieren, aber das ist garantiert nicht das was du möchtest.

Was du suchst ist sehr wahrscheinlich Dateiuploads über HTTP Formulare:
http://de2.php.net/manual/en/features.file-upload.php

Gruß,

Gaert

Frank#
11-01-2005, 15:59
Ich meinte auch nicht Servieren, sondern uploaden -> hin zum Server. Ich hab ja schon einen :)

ich hab mir schonmal folgendes überlegt. Leider habe ich keine Ahnun wie er zwischen bin und asc Mode abhängig vom File unterscheiden kann.




// connecten
$conn_id = ftp_connect("Server");

// Öffne Verbindung
$login_result = ftp_login ($conn_id, "user", "pass");

// Prüfe Session
if ((!$conn_id) || (!$login_result)) {
echo "Ftp-Connect failed!"; die;
} else { echo "Connected.</P>";
}

// wir wollen nur passive mode
$mode = ftp_pasv ($conn_id, true) ;

// überprüfe den passive mode
if (!$mode) {
echo "Passiv failed! </P>"; die;
} else { echo "Passiv Mode ON </p>";
}

// wechsel nach Upload
$change = ftp_chdir($conn_id, "/upload");

// Check Directory
if (!$change) {
echo "Kann nicht nach /Upload wechseln"; die;
} else { echo "Verzeichnis ist /upload </p>";
}

// uploaden der Datei
$upload = ftp_put($conn_id, $zieldatei, $lokale_datei, FTP_ASCII);

// Upload-Status überprüfen
if (!$upload) {
echo "<p>Ftp upload ging in die Hose!</p>";
} else { echo "<p>Datei $lokale_datei auf $host als $zieldatei geschrieben </p>";
}

// Schließen der Verbindung
ftp_quit($conn_id);

Pingu
11-01-2005, 16:04
Hi,

aber das brauchst Du doch gar nicht, da Internet Explorer und Netscape/Firefox das selber schon können.
Bedenke dabei auch, wenn Du es über PHP machst, spielen plötzlich Sachen mit Scriptlaufzeiten (Timeout), Dateigröße, akzeptierte POST-Größe in PHP und im Apache, Timeout im Apache und noch einige Dinge mehr hereinspielen, die das ganze relative schnell zum Nightmare werden lassen können.
Biete dann lieber Web-DAV noch als Alternative zu FTP an.

Pingu

Frank#
11-01-2005, 16:23
Gute Idee, ansich eine super Lösung. Das ganze soll wirklich sehr sicher laufen. Wie gesagt, ich bin selber auch nicht so ganz dafür. Hab schon ne Weile php drauf und es funktioniert doch ganz gut.

Hmm, apachemässig hab ich php mit drinne und wollt da jetzt nicht noch unbedingt den weiter aufbohren. Viele Leute beschäftigen sich heutzutage kaum mit mehr mit FTP Programmen, da gibts ja Browser für, und downloaden können ohne Ende.

per html vorher die parameter prüfen ginge doch. Den input Filename, seine länge, so wie ich das bisher gemacht habe.


<html>
<head>
<title>Datei Upload</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>Upload</h1>
<form action="upload.php" enctype="multipart/form-data" method="POST">
<p> Bitte Datei auswählen<br>

<p> Bitte Datei auswählen<br>
<input name="File" type="file"
size="50" maxlength="1024" accept="text/*">
</p>
<p>Verzeichnis/Zieldatei<br>
<input type="text" name="zieldatei">
</p>
<p>
<input type="submit" name="Hochladen"
value="Abschicken">
</p>
</form>
</body>
</html>


Jetzt müssten die vorher noch ihren Usernamen samt Passwort einegeben können, genau den der in der Mysql datenbank drinne steht.

Wäre das so in Ordnung ?