Upload von Textfiles für 450 User - denk ich hier richtig?

Alles, was PHP betrifft, kann hier besprochen werden.

Upload von Textfiles für 450 User - denk ich hier richtig?

Postby Atrus2711 » 26. January 2005 09:28

Hallo Gemeinde,

ich will für jeden von 450 Usern folgendes anbieten können:
* Download einer von mir bereitgestellten MDB.Datei
* Upload einer Textdatei (wird von der MDB erzeugt) per HTTP. FTP scheidet leider wegen restriktiver Portsperrung bei den Usern (Schulen) aus.
* Download und Upload von außerhalb (Internetverbindung)
* Jeder User darf nur von seinem Ordner rauf- und runterladen

Zur Verfügung steht ein 24/7 per DSL verfügbarer Rechner mit Win 2000 Pro, auf dem ich alle Rechte habe. Der Rechner ist physisch zugänglich und wird per dyndns dauerhaft erreichbar sein.

Mein Ansatz:
* XAMPP als Webserver
* mySQL als Datenbasis für die korrekte Anmeldung
* Anmeldung der User auf der Startseite; bei richtiger Anmeldung Weiterleitung auf "Heimatseite" des Users
* Download der MDB (liegt für jeden User in "seinem" Ordner zum Download bereit) per HTTP
* User erfassen lokal Daten in der MDB (kann Tage dauern) -> Textdatei entsteht durch MDB
* Rücksendung der Textdatei per HTTP-Formular und php
* Sobald alle gemeldet haben, Abzug aller Textfiles und Massenimport nach Access -> Weitere Auswertung (ist bereits fertig).

Meine Erfahrung:
XAMP seit gestern abend
PHP seit wenigen Tagen
SQL (MSSQL2k, Access) seit Jahren, d.h. wenn ich erstmal an die DB rankomme, gehts :-)
VB und VBA seit Jahren (habe die Erfassungs- und Auswertung DB entwickelt).

Was ist besonders "haklig" bei der ganzen Sache? Welche Bedenken kommen Euch? Im letzten Jahr habe ich die ganze Sache per FTP gemacht (CesarFTP), das klappte auch ganz gut, inkl. FTP-Upload direkt aus VBA heraus, allerdings hatten viele User den FTP-Port zugemacht, so daß diese User nicht arbeiten konnten. HTTP sollte aber funktionieren.

Hat jemand da was fertiges? Habe mich schon getummelt, aber die meisten Teile sind mir zu hoch bzw. zu speziell.

Danke Euch
Martin
Atrus2711
 
Posts: 31
Joined: 26. January 2005 08:40

Postby Ceelight » 26. January 2005 10:21

Weißt Du, wie der DB-Zugriff unter php funktioniert? Dann sollte das Anmeldeverfahren kein Thema sein. Die DB ist aber nicht zwingend erforderlich. php würde reichen. Aber bei 450 Usern?

Download der *.mdb ist easy. html-Link auf die entsprechende Seite und für die DAUs unter den Schüler noch der Hinweis "Ziel speichern unter..." ;)

Upload ist auch einfach. php-Schnipsel findest Du zu Hauf im Netz (Google ist Dein Freund).

Der "Abzug" der Textfiles ist ja später auch kein Problem, da Du ja Vollzugriff auf den Rechner hast.

Als php-Neuling (wie auch ich einer bin) eine herausfordernde aber machbare Aufgabe, wenn man nicht unter Zeitdruck steht ;) Was ich Dir anbieten kann, ist ein funktionierendes upload-Skript und Authentifizierung mit php. Aber erst am WE, da ich erst dann wieder am eigenen Rechner zu Hause sitzen werde...
There's no place like 127.0.0.1
User avatar
Ceelight
 
Posts: 295
Joined: 31. January 2004 19:57
Location: Pfälzer im niedersächsischen Exil ;-)

Hmmm

Postby Atrus2711 » 26. January 2005 11:44

Hi ceelight,

ich arbeite weiter an meiner Lösung, aber ich wäre an Deiner interessiert. Wenn Du es also am WE schaffst, wär das super.

Die Identifizierung der User muß nicht zwingend über eine DB laufen, auch php oder Textfile wäre mir recht, umal ich mysql noch nicht so kenne und per php noch nicht sicher draufkomme. Wenn für einen Nicht-DB-mäßigen Auth die Textfiles bestimmte Form haben müssen - kein Problem, kann ich automatisieren. Hatte schon die masch. Erstellung von 450 htaccess-Files (eine je Ordner) erwogen - mit codiertem Pw. naja, wenn es auch anders geht.

Download und Upload geht ja auch schon, allerdings noch ohne Zugriffschutz, d.h. wer rankommt, kann! Das soll aber ausgeschlossen werden - auch bei direktem Durchspringen zur Datei oder zum Verzeichnis.

Ich versuche mal, die gefundenen Scripte auf dem XAMP zum laufen zu bringen (bisher hatte ich flat2serv und eine eigene Installation von php 5.0, da gings auch schon -> muß nur die konfigs ein bißchen umbauen).

Danke einstweilen :D
Martin
Atrus2711
 
Posts: 31
Joined: 26. January 2005 08:40

Postby Ceelight » 26. January 2005 12:05

Meine Lösung zur Anmeldung läuft mittels einer Variable, die das PW mit dem definierten PW in ner anderen Datei abgleicht (Stichwort: include()). Das wäre bei Dir aber zu wenig. Du müsstest mit nem array arbeiten, wobei der key des arrays der Username und der Wert das PW wäre. Das array solltest Du sicherheitshalber in ner einfachen *.php festlegen und kannst es dann mittels include() in das Anmeldeskript holen.

Die PW-Abfrage ist dann recht einfach mit if zu regeln.

Ich geb Dir mal nicht zu viele Tipps, weil es soll ja auch noch Spaß machen, oder nicht?

Die Skripte setz ich dann am WE hier rein...
There's no place like 127.0.0.1
User avatar
Ceelight
 
Posts: 295
Joined: 31. January 2004 19:57
Location: Pfälzer im niedersächsischen Exil ;-)

nachfrage

Postby Atrus2711 » 26. January 2005 12:13

Hi,

wo ich grade davon geschrieben habe, wäre doch folgendes die "billigste" Lösung ür einen Noob wie mich:

* Es werden maschinell 450 Unterordner angelegt
* Jeder davon bekommt eine .htacess, die Anmeldung erfordert, keine Dateien anzeigt usw.
* Die User/PW-Kombis stehen in einer htpasswd, die außerhalb des Webordners steht- > kann ich generieren
* Bei richtiger Anmeldung -> Zugang auf die Seite, Link erlaubt MDB-Download
* Zusätzlich auf der jetzt zugänglichen Seite: ein Upload-Formular, das für die zurückzumeldende Textdatei einen ebenfalls userspezifischen upload.php anstößt. Die 450 upload.php-Files unterscheiden sich nur im Zielordner - kann ich generieren.

Ja, das ist nicht die feine Art. Aber es eilt ein bißchen, und PHP und mySQL will ich zwar kennenlernen, aber nicht unter Druck, wie ich ihn habe :oops:

Frage ist nur, ob diese Mechanik hinreichend sicher gegen Angriffe von außen ist.

Grüßle
Martin
Atrus2711
 
Posts: 31
Joined: 26. January 2005 08:40

Postby Ceelight » 26. January 2005 13:35

Hm, mal überlegen. Unter 450, wahrscheinlich eher jüngeren, Usern sind immer ein paar geeks dabei;) Da ist Sicherheit natürlich ein Thema. Aber php vs. htaccess: Da sollen sich bitte andere dazu äußern. Hab ich zuwenig Erfahrung mit.Die Lösung würde natürlich funktionieren, wobei ich php vorziehen würde.

Mir kommen da spontan noch folgende Gedanken:

1. Es muss schon auf der Startseite der User eingegeben werden, da sonst nicht klar ist, welche htaccess in welchem Ordner benutzt werden soll, oder?

2. Warum spezielle User-Ordner? Sind die *.mdb userspezifisch?

3. Den upload kannst Du, bei Nutzung von php, auch in einem Ordner machen und dem Textfile im Namen den Usernamen mitgeben.

4. Apache kennt den ordner cgi-bin, der von aussen nicht erreichbar ist ("Forbidden" - Rückmeldung). Den kannst Du im htdocs erstellen, wenn er nicht schon vorhanden ist. Dorthin kannst Du alle textfiles und auch die PW-Dateien stellen. Das sollte ziemlich sicher sein.


An die Profis da draussen: Bitte korrigiert mich, wenn ich hier Unwahrheiten erzählen sollte ;)
There's no place like 127.0.0.1
User avatar
Ceelight
 
Posts: 295
Joined: 31. January 2004 19:57
Location: Pfälzer im niedersächsischen Exil ;-)

Postby Atrus2711 » 26. January 2005 16:32

Nein, Schüler sind nicht dabei. Es geht um Ergebnisse eines Wettbewerbs, die von den Lehrern an Schlurechnern erfaßt werden. Da ist mit geeks nichts zu wollen *duck*, aber grds. sollte natürlich ein Fremdzugriff verunmöglicht werden.

Zu Deinen Fragen:
1.) es könnte ja einen übergeordneten Ordner als "Startseite" geben, wo jede Schule ihren Unterordner hat - der dann erst nach Anmeldung zugänglich ist.

2) Bestimmte Parameter sind schulspezifisch. Die Erfassung dieser Werte kann ich nicht den Schulen überlassen, da davon Plausis auf die erfaßten Werte abhängen. Die MDB selbst ist als mde verkapselt und damit dicht gegen Sabotage.

3) so dachte ich mir das auch. Aber weil eben die Dateinamen pro Schule feststehen, muß die upload.php diesen Dateinamen kennen. und das geht nur per DB oder per vorherige Identifizierung.

4) da würden ja auch die Scripte für den Upload liegen, damit sie nicht gelesen, aber vom Server ausgeführt werden können.

Grüßle
Martin
Atrus2711
 
Posts: 31
Joined: 26. January 2005 08:40

Postby Ceelight » 26. January 2005 18:45

Ich glaub, dass passt mittlerweile besser in das php-Forum. Mods, evtl. verschieben?

So, hab jetzt doch noch Zeit gefunden. Hier also die Skripts (html aussenrum hab ich erstmal weggelassen. Dürfte ja klar sein ;) ):

1. Auszug aus index.php
PW-Abfrage, sollte klar sein. $pw wird an admin.php übergeben:
Code: Select all
Zum Adminbereich bitte Passwort eingeben.
<form action="/ceephp/admin.php" method="post">
<input type="password" name="pw" />
<input type="submit" value="OK" />
</form>


2. admin.php.
Hier steckt auch das upload skript drin. Mit include() binde ich das pw ein, welches in cgi-bin liegt:
Code: Select all
<?php
    $login = false;
    include("../cgi-bin/ceepass.inc.php");
    if (isset($_POST['pw']) && $_POST['pw'] == $pass) {
        $login = true;
    }
    if ($login) {
        echo "Adminbereich - File upload";
        echo "<form action='upload.php' method='post' enctype='multipart/form-data'>
        <input type='file' name='datei'>
        <input type='submit' name='submit' value='upload file'>
        </form>";
        echo "Folgende Dateien sind momentan unter /upload zu finden:<br><br>";
        $pfad = "../upload/";
        $filehandle = opendir($pfad);
        while ($file = readdir($filehandle)) {
            if ($file != "." && $file != "..") {
                echo "<a href='../upload/$file'>$file</a><br>";
            }
        }
    } else {
        echo "Netter Versuch, aber vergiss es! ;-)";
    }   
    ?>


3. ceepass.inc.php
So einfach geht das mit dem PW. Hier solltest Du dann das array reinstellen.
Code: Select all
<?php
$pass = "passwort";
?>


4. upload.php
Hier wir angezeigt, ob der upload erfolgreich war oder nicht. Ausserdem wird angezeigt, welche Dateien schon im Verzeichnis liegen.
Code: Select all
<?php
    $pfad="../upload/";
   
    if (isset($_FILES['datei'])) {
        $tempname = $_FILES['datei']['tmp_name'];
        $dateiname = $_FILES['datei']['name'];
        echo "tempname: $tempname<br>";
        echo "Dateiname: $dateiname<br>";
   
        if (move_uploaded_file($tempname, $pfad . $dateiname)) {
        echo "<b>Alles ok!</b> :-)<br>Dateiname: $dateiname<br>Zu finden in /upload.<br><br>";
        } else {
        echo "N&ouml;, hat n&uuml;ch geklappt :-(";
        }   
    }
   
    echo "Folgende Dateien sind momentan unter /upload zu finden:<br>";
    $filehandle = opendir($pfad);
    while ($file = readdir($filehandle)) {
        if ($file != "." && $file != "..") {
            echo "<a href='../upload/$file'>$file</a><br>";
        }
    }
    closedir($filehandle);
     ?>



Viel Spaß! :)

Cee
There's no place like 127.0.0.1
User avatar
Ceelight
 
Posts: 295
Joined: 31. January 2004 19:57
Location: Pfälzer im niedersächsischen Exil ;-)

Postby Ceelight » 26. January 2005 18:55

Wie gesagt, ich steh mehr auf die php-Variante, weil Du dann auch schon den Usernamen in einer Variablen hast und dementsprechend weiter nutzen kannst (ordnername, name für textfile usw...). Denk nochmal drüber nach ;)

Ist echt ein schönes und nicht zu schwieriges Projekt. Würde mir auch Spaß machen. Also, wenn noch Fragen sind..

Cee
There's no place like 127.0.0.1
User avatar
Ceelight
 
Posts: 295
Joined: 31. January 2004 19:57
Location: Pfälzer im niedersächsischen Exil ;-)

Hm, sieht gut aus. Mal sehen, ob ich das einsetzen kann...

Postby Atrus2711 » 27. January 2005 08:40

Danke für die Mühe, die ich Dir gemacht habe :D

Grüßle
Martin
Atrus2711
 
Posts: 31
Joined: 26. January 2005 08:40


Return to PHP

Who is online

Users browsing this forum: No registered users and 6 guests