Anzeige:
Ergebnis 1 bis 5 von 5

Thema: "direkte" ausgabe mit passthru()

  1. #1
    Registrierter Benutzer
    Registriert seit
    16.02.2003
    Beiträge
    9

    "direkte" ausgabe mit passthru()

    Ich habe ein kleines command-programm für meinen linux-computer geschrieben, welches mir in reihenfolge verschiedene werte ausgibt, jeweils auf eineer neuen zeile. Von wert zu wert dauert das etwa 3. sekunden, also etwa so:

    ausgabewert1
    (>3 sekunden verstreichen)
    ausgabewert2
    (>3 sekunden verstreichen)
    usw..

    Jetzt möchte ich den Output dieses Programmes mittels php auf den webbrowser umleiten. Ich habe dazu viele hinweise auf die passthru() funktion gefunden, und versucht, diese einzusetzen.

    Das Problem ist jedoch folgendes: Wenn ich mein skript im Browser starte, geht es recht lange, bevor eine ausgabe auftaucht, dafür kommen dann gleich alle miteinander. Im endeffekt also dasselbe. Was fehlt ist, die ausgabe zeile für zeile zu formatieren, und nicht einfach in einem langen string.

    Und es wäre schöner, wenn auch im browser zeile für zeile ausgegeben würde, wie ich es auch schon gesehen habe im internet. Weiss jemand, wie das geht?

    vielen dank im voraus!

  2. #2
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    wenn du Zeienweise ausgeben moechtest, dann hast du genau 2 Moeglichkeiten:

    1) "\n" durch "<br/>" ersetzen

    2) als content type text anstelle von html angeben

    Was das gleichzeitige ausgeben von den Infos angeht:

    das geht nicht anders, wenn du HTTP (korrekt?) verwendest, denn da gibt es einen Header content-length, der die groesse des Dokumentes enthaelt. Diese ist natuerlich erst bekannt, wenn das Skript fertig ist.

    mfg

    c.

  3. #3
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Hallo Penguroot!

    Wie sagi bereits erwähnt hat musst du einfach nur die Zeilenumbrüche durch <br/> ersetzen... dafür gibt es die funktion nl2br()

    Seiten nach und nach auszugeben funktioniert durch das flushen des output buffers mit flush() bzw. ob_flush().

    Allerdings funktioniert das in deinem Fall auch nicht, weil passthru die Skriptausführung anhält bis das aufgerufene Programm beendet ist.
    Mehr Infos dazu findest du in der Online Doku: http://php.net/passthru

    Möglicherweise kannst du das nach und nach ausgeben über Pipes mit popen() realisieren.


  4. #4
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    Wie sagi bereits erwähnt hat musst du einfach nur die Zeilenumbrüche durch <br/> ersetzen... dafür gibt es die funktion nl2br()
    ich persoenlich finde es besser, den content type zu aendern, da so nicht die komplette Ausgabe nochmals geparst werden muss.

    http://www.w3.org/Protocols/rfc2616/....html#sec14.17

    und wegen flush() dun content-length:

    http://www.w3.org/Protocols/rfc2616/....html#sec14.13

    Applications SHOULD use this field to indicate the transfer-length of the message-body, unless this is prohibited by the rules in section 4.4.

  5. #5
    Registrierter Benutzer Avatar von Gaert
    Registriert seit
    09.05.2002
    Ort
    Nußloch
    Beiträge
    1.317
    Original geschrieben von sagi

    ich persoenlich finde es besser, den content type zu aendern, da so nicht die komplette Ausgabe nochmals geparst werden muss.
    Das kommt darauf an, ob die Ausgabe formatiert werden soll oder nicht... wenn ja, dann kommst du um HTML nunmal nicht rum... im übrigen ist nl2br() performant implementiert... da brauchst du dir wegen den drei Zeilenumbrüchen keine sorgen machen.

    Original geschrieben von sagi
    und wegen flush() dun content-length:
    http://www.w3.org/Protocols/rfc2616/....html#sec14.13
    Dies ist eine soll Bestimmung... jeder Browser kann eine Seite ohne content-length darstellen, daher sehe ich kein Problem darin flush() zu verwenden (auch wenn dies die Spezifikation verletzt), wenn die Applikation es verlangt - hier bringt es aber eh nichts!


Lesezeichen

Berechtigungen

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