perl-asp mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ellers <ell...@iinet.net.au>
Subject Re: Including CGI's
Date Wed, 05 Jun 2002 11:50:13 GMT
At 10:31 AM +0100 5/6/02, Ian Cass wrote:
>  > What you've got there is prob what I'd do for getting it to run...
>
>It's nice to know I'm not missing something completely obvious.

See some comments below


>  > although I'd probably add a parameter to the cgi script so it skipped the
>content-type stuff (thereby stopping you from having to strip it)
>
>True, but I wanted a generic fits-all solution without having to maintain
>modified versions of CGI source.


I'm not sure what you mean by "fits all" solution. If you add a flag 
like "--no-headers-footers" or "--includable" then the CGI program 
should just skip sending out content-type and <html></html> tags. No 
big deal.


>  > Could you make the functions in the cgi script (presuming it is perl) in
>the global.asa and then just run the funcs?
>
>The CGI's I've got in mind are written in c++.


I recall that the `backtick` approach to run another program in perl 
is ok but means all output gets buffered therefore more memory etc. 
Probably these days it doesn't make much difference, but I tried a 
different approach just to see if it would work.

The following works nicely:

#!/usr/bin/perl


# note 1: use of sh style variable setting on command line
#          (presumably perl just forks a sh? Eh, it works.
# note 2: use of flag to blah.cgi to tell it to skip content-type stuff
#         If flag can be added then see Note 3.

$streamName = "QUERY_STRING=\"$ENV{QUERY_STRING}\" ./blah.cgi --no-header-foote
r |";

open( STREAM, $streamName ) or die "Uh-oh, couldn't open the stream";


LINE: while ( defined( $line = <STREAM> ))
{
     # Note 3: skip these checks if can request no headers/footers
     next LINE if $line =~ /^Content-type:/;
     next LINE if $line =~ /<html/i;
     next LINE if $line =~ /<\/html/i;

     print $line;
}


It is more verbose, but (arguably!) cleaner and probably more 
efficient as the output is printed as it is read.


HTH
Ellers


>--
>Ian Cass
>
>
>>
>>  HTH
>>
>>  Ellers
>>
>>
>>  6/5/02 4:36:25 PM, "Ian Cass" <ian.cass@mblox.com> wrote:
>>
>>  >Hi,
>>  >
>>  >Bit of a puzzler here. What would be the correct way of running a CGI and
>>  >have its output embedded on an Apache::ASP page?
>>  >
>>  >The site I'm working on has no frames & uses headers and footers to
>provide
>>  >formatting. What I want to be able to do is to print my headers, the
>output
>>  >from the generic CGI, then print my footer. Obviously, a redirect wont
>work
>>  >here & an include will not execute the cgi. I need an 'exec and include
>>  >output' command.
>>  >
>>  >I've come up with a horrible .asp wrapper hack for now that works for me,
>>  >but I'm convinced there must be a 'proper' way of doing this.
>>  >
>>  >#!/usr/local/bin/perl asp
>>  ><%
>>  >$Response->Include($Server->MapPath("/gui/header.inc"));
>>  >my $me = basename($0);
>>  >$me =~ s/\.asp//;
>>  >my $content = `env "$ENV{'QUERY_STRING'}" ./$me.cgi`;
>>  >$content =~ s/Content-type:.*\n//;
>>  >$content =~ s/<html>//;
>>  >$content =~ s/<\/html>//;
>>  >$content =~ s/<body[^>]*>//;
>>  >$content =~ s/<\/body>//;
>>  >print $content;
>>  >$Response->Include($Server->MapPath("/gui/footer.inc"));
>>  > %>
>>  >
>>  >--
>>  >Ian Cass
>>  >
>>  >
>>  >
>>  >
>>  >---------------------------------------------------------------------
>>  >To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
>>  >For additional commands, e-mail: asp-help@perl.apache.org
>>  >
>>  >
>>  >
>>
>>
>>
>>
>>  ---------------------------------------------------------------------
>>  To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
>>  For additional commands, e-mail: asp-help@perl.apache.org
>>
>>


---------------------------------------------------------------------
To unsubscribe, e-mail: asp-unsubscribe@perl.apache.org
For additional commands, e-mail: asp-help@perl.apache.org


Mime
View raw message