Steven, how do you put your script under the mod-perl environment? What is
your httpd.conf file? Thx.


On Mon, May 13, 2024 at 10:00 PM Steven Haigh via modperl <
modperl@perl.apache.org> wrote:

> I wonder if perhaps I haven't been clear in the problem.
>
> In the provided code example:
>       my $cmd = "/bin/stdbuf";
>       my @args = qw@ -o1 -e1 /usr/bin/speedtest-cli@;
>
>       print '<pre class="alert">';    <-- appears in the HTML output.
>       my $pid = open3(0, \*READER, 0, $cmd, @args);
>       while ( my $output = <READER> ) {
>             print $output;      <-- This never outputs anything.
>       }
>       print "Speed test complete.</pre>"; <-- appears in the HTML output.
>       waitpid $pid,0;
>
> If I was to guess, it seems like an interaction with open3 and modperl.
>
> https://perldoc.perl.org/IPC::Open3
>
> The syntax is basically:
>
> my $pid = open3( <input>, <stdout>, <stderr>, $cmd, @args );
>
> If I understand it right, I give it a filehandle - which I then read
> from. The executed command is then:
>
> /bin/stdbuf -o1 -e1 /usr/bin/speedtest-cli
>
> The inclusion of using stdbuf with these options are to stream the ouput
> line after line, and not whatever terminal buffer is in place that will
> return the output in a chunk.
>
> However, all output from running the command ends up in the apache logs.
>
> That means that <READER> never gets anything, and therefore the print is
> never called.
>
> Does that make more sense?
>
>
> On 14/5/24 12:46, Joseph He wrote:
> > Steven, you need to use those mod-perl libraries to handle the web
> > request and to generate the response.
> >
> > https://perl.apache.org/docs/2.0/user/intro/start_fast.html
> > <https://perl.apache.org/docs/2.0/user/intro/start_fast.html>
> >
> > Scroll down to the bottom, you can see how to output the content.
> >
> > Cheers,
> > Joseph
> >
> >
> > On Mon, May 13, 2024 at 9:35 PM Steven Haigh via modperl
> > <modperl@perl.apache.org <mailto:modperl@perl.apache.org>> wrote:
> >
> >     That being said, is there a way to output to the web page in this
> >     scenario?
> >
> >     On 14/5/24 12:15, Joseph He wrote:
> >      > CGI script runs on its own process. mod-perl basically wraps CGI
> >     script
> >      > into apache process, that is why its output is automatically
> >     going to
> >      > Apache log.
> >      >
> >      > On Mon, May 13, 2024 at 1:53 AM Steven Haigh via modperl
> >      > <modperl@perl.apache.org <mailto:modperl@perl.apache.org>
> >     <mailto:modperl@perl.apache.org <mailto:modperl@perl.apache.org>>>
> >     wrote:
> >      >
> >      >     Hi all,
> >      >
> >      >     I'm playing around with mod_perl on apache on docker - and
> >     now I've
> >      >     finally got all the module issues sorted, I'm trying to
> >     figure out why
> >      >     when using mod_perl, the output of scripts ends up in the
> >     apache logs.
> >      >
> >      >     The following configuration works, and the output of shelled
> >     scripts
> >      >     works as expected:
> >      >
> >      >     <Location />
> >      >           DirectoryIndex index.pl <http://index.pl>
> >     <http://index.pl <http://index.pl>> index.html
> >      >           AddHandler cgi-script .pl
> >      >           Options +Indexes +FollowSymLinks +ExecCGI
> >      >           Require all granted
> >      >     </Location>
> >      >
> >      >     If I change this to use mod_perl, all output from scripts run
> >     in web
> >      >     pages ends up in the apache log:
> >      >
> >      >     <Location />
> >      >           DirectoryIndex index.pl <http://index.pl>
> >     <http://index.pl <http://index.pl>> index.html
> >      >           AddHandler perl-script .pl
> >      >           Options +Indexes +FollowSymLinks +ExecCGI
> >      >           Require all granted
> >      >     </Location>
> >      >
> >      >     The perl code I'm using in the web page is as follows:
> >      >     my $cmd = "/bin/stdbuf";
> >      >     my @args = qw@ -o1 -e1 /usr/bin/speedtest-cli@;
> >      >
> >      >     print '<pre class="alert">';
> >      >     my $pid = open3(0, \*READER, 0, $cmd, @args);
> >      >     while ( my $output = <READER> ) {
> >      >           print $output;
> >      >     }
> >      >     print "Speed test complete.</pre>";
> >      >     waitpid $pid,0;
> >      >
> >      >     Does anyone have any clues as to why STDOUT would end up in
> >     the apache
> >      >     log and not in the web page being served when using
> >     perl-script as the
> >      >     handler?
> >      >
> >      >     --
> >      >     Steven Haigh
> >      >
> >      >     📧 net...@crc.id.au <mailto:net...@crc.id.au>
> >     <mailto:net...@crc.id.au <mailto:net...@crc.id.au>>
> >      >     💻 https://crc.id.au <https://crc.id.au> <https://crc.id.au
> >     <https://crc.id.au>>
> >      >
> >      >
> >
> >     --
> >     Steven Haigh
> >
> >     📧 net...@crc.id.au <mailto:net...@crc.id.au>
> >     💻 https://crc.id.au <https://crc.id.au>
> >
>
> --
> Steven Haigh
>
> 📧 net...@crc.id.au
> 💻 https://crc.id.au
>
>

Reply via email to