in reply to (OT?) Output buffering w/Apache

Thanks for the responses so far. (btw I'm on Apache 1.3.17)

When I try the NPH example in the CGI doc I get the following in the error log:

malformed header from script. Bad header=HTTP/1.1 200 OK:

Suggestions?

Replies are listed 'Best First'.
Re: Re: (OT?) Output buffering w/Apache
by bastard (Hermit) on Apr 11, 2001 at 23:47 UTC
    Try this code and name the script nph-something.pl.
    I haven't tested it, but it should work. The problem with using the nph mode of the webserver with a script is that the script must now supply all of the standard headers itself. Using the CGI header() function automatically provides these for you.
    #! /perl/bin/perl -w use strict; use CGI; my $q = new CGI; print $q->header(-nph=>1); print "<html><body>"; for my $i (1..5) { my $data = "<br>Line $i"; sleep 1; print $data; } print "</body></html>";
      When I first did this I got the same message as above (malformed header ...). I then renamed the file "nph-foo.pl". No server error this time, but still didn't get any results until the whole thing was ready. Oh, well.
        Ok, i think I know what the problem is now.
        I tested my code (guess i was too lazy before).

        The problem seems to be the size of the resulting display data. 1 to 5 just wan't enough. I changed the code to iterate from 1 to 500000 and removed the sleep (it works with the sleep, but for me 66 lines had to be printed before anything would display).

        My guess is that the browser also has a buffer. The amount of data sent must first fill this buffer before the browser will attempt to display the data it has recieved.

        I also discovered when testing my suggestion that on the command line the script buffers the results until it is complete (on the 1-5 iteration). Adding the $| = 1; you had in the code originally helped this. It doesn't seem to make a difference with the large incrementation set.

        I know it's not line by line output, but with straight cgi it's probably the best that can be had. Hope it helps.

        3 buffers: (+ how to defeat)

        • Webserver
          nph-scriptname.pl
          CGI->nph(1)
          $q->header(-nph=>1)
        • Perl
          $| = 1
        • Browser
          probably can't affect this

        P.S.- as i finish this the test script is on "Line 854"