Anzeige:
Ergebnis 1 bis 7 von 7

Thema: Mit PHP (oder Wahlweise CGI) File-Uploads sequentziell lesen und verarbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103

    Mit PHP (oder Wahlweise CGI) File-Uploads sequentziell lesen und verarbeiten

    Hallo.

    Ich hab mal im g00gle gesucht, und unter Anderem das hier, das hier und das hier gefunden. Nunja. Das sieht ja alles ganz brauchbar aus, wenn man eine Datei hochladen will, die man dann auf dem Server speichern will oder irgendwo anders. Allerdings will ich etwas anderes: ich will den Inhalt der Datei verarbeiten koennen, noch bevor sie gespeichert ist. Genaugenommen muss sie ueberhauptnicht gespeichert werden, sie enthaelt Daten, die ich anderweitig verarbeiten will. Selbst die Laenge der Datei ist mir eigentlich scheibe, solange ich sie sequentiell lesen kann (wobei das wohl mit HTTP nicht moeglich sein wird).

    Sprich: Ich will direkt mit PHP auf den FileUpload-Stream zugreifen. Die Datei muss nicht zwischengespeichert werden. Bzw. sie soll garnicht zwischengespeichert werden. Und es ist wichtig, dass ich immedately verarbeiten kann, also nicht bis zum ende der Dateiuebertragung warten muss.

    Geht das irgendwie?

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Imho solange der Apache druntergeschaltet ist nicht ohne im Apache rumzupfuschen.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103
    Hm... Das ist ja dumm... Gibts irgendeine sinnvolle Library, mit der man sich selber nen kleinen HTTP-Server schreiben kann, der NUR das macht? Hab jetzt keinen Bock, die ganze RFC durchzulesen.

  4. #4
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    wenn du den http upload-mechanismus nicht benutzen willst, macht es wenig sinn über einen eigenen http-server nachzudenken. ich habe hier bei mit einige sachen realisiert, indem ich perl-scripts hinter den xinted gepackt habe. damit muss ich mich nicht um den ganzen netztwerkverkehr kümmern und bekomme einen stream über stdin... sollte auch mit php-cli gehen

    mein xinetd-conf sieht so aus:
    Code:
    service lblrandom
    {
            type            = UNLISTED
            id              = lblrandom
            socket_type     = sream
            protocol        = tcp
            user            = root
            wait            = no
            disable         = no
            port            = 1234
            server          = /root/rdgen/rd_server.pl
            log_type        = FILE /var/log/rs_server.sys.log
            log_on_success  += HOST DURATION
            log_on_failure  += HOST ATTEMPT
    }
    das hier ist der eigentlich spannende auszug aus dem perl script mit dem ich den stream verarbeite....

    Code:
    $|=1;
    my $msg="";
    my $end=0;
    
    while(<>) {
            $msg.= $_;
            last if ($msg=~ /\<\/root\>/ );  #beenden der Schleife sobald </root> gesendet wurde
            }
    vielleicht hilft dir das ja bei deinen weiteren überlegungen...
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  5. #5
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103
    Hm. Ich versteh nicht so genau, was du da machst... Kenn mich aber mit xinetd wenig aus... Ähm...

    Ein eigener HTTP-Server... Damit meine ich einen selberprogrammierten oder sowas... Also quasi etwas, das nicht die dummen pseudosicheren Mechanismen von Apache benutzt, sondern mit den Requests genau das macht, was ich will.

  6. #6
    Registrierter Benutzer Avatar von elrond
    Registriert seit
    04.10.2001
    Ort
    potsdam
    Beiträge
    881
    hmm, xinetd bzw inetd ist ein serverdienst, der für dich auf jedem tcp/ip port lauscht, den du konfigurierst. Damit ist dieser ganze trödel erstmal vernunftig untergebracht. du kannst das ding dann auf jedem port ansprechen den du willst und kannst eben an diesen server auch senden was du willst, uu auch einen datenstream....

    Wenn du den upload vollständig umgehen willst, brauchst du dann aber auf der client(browser)-seite einen client, der deine datei einliest und stream erzeugt, den der server verarbeiten soll.

    Ich versuch mal ein beispiel:

    Du hast einen server (www.meinserver.de), der auf dem port 1704 daten zur verarbeitung erwartet geschrieben und installiert. Nun willst du dem eine datei senden. Dazu startest du an deinem client ein programm, dass die kommunikation mit dem server auf www.meinserver.de:1704 aufnimmt. dem programm sagst du nun, es soll die Datei xyz.dat übertragen. Dein clientprogramm kann nun deine datei satz für satz lesen und an den server weitergeben, der die daten satz für satz verarbeitet.
    Auf diesem (vereinfachten) weg arbeiten übrigens auch audio/video-streams aus dem inet. an dieser stelle ist der server, der die daten empfängt ein prog auf deinem rechner, iTunes zB....

    Wenn du weiter in das thema einsteigen willst solltest du dich zum thema sockets belesen.

    z. Bsp. : http://de.wikipedia.org/wiki/Socket
    "Um die Welt zu ruinieren, genügt es, wenn jeder seine Pflicht tut." (Winston Churchill)

  7. #7
    Registrierter Benutzer
    Registriert seit
    05.06.2006
    Beiträge
    103
    Hm. Ich weiss was Sockets sind und prinzipiell weiss ich auch wozu inetd gut ist, aber... Ein Programm, das auf einem Port lauscht, und das Empfangene irgendwie verarbeitet (also quasi einen Server mit einem... minimalen Protokoll, das ich selber definiere) kann ich theoretisch auch ohne inetd aufsetzen (indem ich z.B. einfach eine kleine java-applikation schreibe (oder wahlweise eine andere progsprache benutze) - was den vorteil haette, dass ich da wuesste, wie es geht, und mich in inetd erst einlesen muesste). Dann kann ich aber auch gleich versuchen, das HTTP-Header-Gespamme selber per Sockets zu senden (allerdings sind die meisten Browser bei HTTP-Headern nur begrenzt Fehlertolerant).

    Also es geht nicht darum, dass /ich/ oder irgendwelche Leute, die sich in irgendeiner Weise auskennen, Daten uebertragen koennen (dazu waere btw scp gut genug). Es geht vA darum, dass der DAU seinen Internet Explorer verwenden kann, und der das auch beherrscht - oder jeden anderen Browser eben auch.

    Danke trotzdem. Inetd ist sicher interessant, ich hab mich bisher nur wenig damit beschoeftigt, weil ich ihn bisher nur fuer bitlbee gebraucht habe, und auch da bin ich irgendwann auf den Daemon-Mode umgestiegen.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •