Paul weingardt: Puffer bei Perl

Hallo,
ich hab eine datei (nph-test.pl), da steht unter anderem das drin:

$|=1;
print "test\n";
sleep(5);
print "test2\n";

nur macht es nicht das, was es sollte, er wartet einfach fünf sekunden, und gibt das dann beides auf einmal aus.Was mache ich falsch?
Danke

  1. Hallo,

    ich hab eine datei (nph-test.pl), da steht unter anderem das drin:

    $|=1;
    print "test\n";
    sleep(5);
    print "test2\n";

    nur macht es nicht das, was es sollte, er wartet einfach fünf sekunden, und gibt das dann beides auf einmal aus.Was mache ich falsch?

    Vielleicht puffert Dein Webserver die Ausgabe. Unter Windows puffert Apache iirc immer die Ausgaben. Neuere Apache (seit 1.3.weisnichtmehr) puffern die Ausgabe afaik sowieso nicht mehr, weshalb Du nicht unbedingt ein nph-Skript benötigst.
    Bei nph-Skripten musst Du nämlich für die Ausgabe sämtlicher relevanten HTTP-Header selber sorgen. Der Apache ist dann nicht mehr so gnädig und schreibt sie dazu.

    Gruß Alex

    1. Moin!

      Vielleicht puffert Dein Webserver die Ausgabe.

      Grad getestet: Es ist der Indianer (Bei mir unter Windows.)
      Das Script selbst macht, was es soll.

      fastix

    2. danke erstmal an alle
      ich hab die Version 1.3.26   kann man das Puffern vielleicht irgendwo in der httpf.conf unterbinden?

      1. Hallo,

        ich hab die Version 1.3.26   kann man das Puffern vielleicht irgendwo in der httpf.conf unterbinden?

        Auf Unixen puffert der Apache nie (zumindest seit 1.3.weisichimmernochnicht ;-), auf Windows puffert der Apache leider immer. Woran das liegt, und ob man das durch selbstkompilieren nach umprogrammierung ändern kann, weis ich leider nicht.

        Gruß Alex

  2. Halihallo

    | ich hab eine datei (nph-test.pl), da steht unter anderem das drin:
    |
    | $|=1;
    | print "test\n";
    | sleep(5);
    | print "test2\n";
    |
    | nur macht es nicht das, was es sollte, er wartet einfach fünf sekunden, und gibt das dann beides auf einmal aus.Was mache ich falsch?

    Gar nix. Es ist nicht nur Perl, welches die Ausgabe cached (was du unterbindest), sondern auch der Webserver (wie Alex schreibt) und dazu noch der Browser. Eine allgemeine Lösung, dies zu beheben gibt es _nicht_; aber ein kleiner Trick, der in einigen Fällen sogar funktioniert:
    Einfach nach der gewünschten Stelle, wo etwas angezeigt werden soll ca. 5000 Leerstellen (' ') ausgeben. Das fördert zwar die Bandbreite nicht und ist auch sonst völliger Unsinn, jedoch dein Problem könnte auf einigen Systemen/Programmen gelöst sein.

    Viele Grüsse

    Philipp