Nes
view release on metacpan or search on metacpan
require IPC::Open3;
my ( $writer, $reader, $error );
my $pid = IPC::Open3::open3( $writer, $reader, $error, "$self->{'CFG'}{'shell_cline'}" );
print $writer $self->{'out'};
close $writer;
$self->{'out'} = '';
while (<$reader>) {
$self->{'out'} .= $_;
}
close $reader;
waitpid( $pid, 0 );
}
return;
}
}
{
package nes_php;
use vars qw(@ISA);
@ISA = qw( nes_content );
sub new {
my $class = shift;
my ( $container ) = @_;
my $self = $class->SUPER::new($container);
# @{ $self->{'file_script'} } = @scripts;
$self->{'Content-type'} = "Content-type: text/html";
$self->{'is_binary'} = 0;
$self->{'file_name'} = $self->{'container'}->{'file_name'};
$self->{'php_wrapper'} = 0;
$self->{'php_wrapper'} = 1 if $self->{'file_name'} eq $self->{'top_container'}->{'file'};
# damos soporte a include PHP al método GET
$self->{'start_script'} = '<?php parse_str($_SERVER[\'QUERY_STRING\'], $_GET); ?>'."\n";
return ($self);
}
sub go {
my $self = shift;
$self->SUPER::go() if !$self->{'php_wrapper'};
my $cline = $self->{'CFG'}{'php_cline'};
$cline = $self->{'CFG'}{'php_cgi_cline'} if $self->{'php_wrapper'};
if ( $self->{'php_wrapper'} || $MOD_PERL ) {
# por seguridad
require Env::C;
foreach (keys %ENV) {
my $var = $ENV{$_};
utl::no_nes_remove(\$var);
Env::C::setenv( $_, $var );
}
}
if ( $MOD_PERL ) {
local $| = 1;
require IPC::Run;
my @command = split(' ', $cline );
my ( $writer, $reader, $error );
my $h = IPC::Run::start (\@command, \$writer, \$reader, \$error, IPC::Run::timeout( 30 ));
if ( $self->{'php_wrapper'} ) {
if ( $ENV{'REQUEST_METHOD'} ne 'GET' ) {
if ( $self->{'query'}->{'save_buffer'} ) {
# todo: es posible que esto consuma mucha memoria en POST grandes
# $writer .= $buffer; sin IPC::Run::pump, pero haciendo pump da
# errores en mod_perl, comprobar
while ( my $buffer = $self->{'query'}->get_buffer ) {
$writer .= $buffer;
}
} else {
$writer = $self->{'query'}->get_buffer_raw;
}
}
} else {
# include PHP no soporta el metodo POST, de momento
$writer = $self->{'start_script'}.$self->{'out'};
}
IPC::Run::pump $h;
IPC::Run::finish $h;
$self->{'out'} = $reader;
warn $error if $error;
} else {
require IPC::Open3;
my ( $writer, $reader, $error, $out_error );
my $pid = IPC::Open3::open3( $writer, $reader, $error, $cline );
binmode $writer;
binmode $reader;
if ( $self->{'php_wrapper'} ) {
if ( $ENV{'REQUEST_METHOD'} ne 'GET' ) {
if ( $self->{'query'}->{'save_buffer'} ) {
while ( my $buffer = $self->{'query'}->get_buffer ) {
print $writer $buffer;
}
} else {
print $writer $self->{'query'}->get_buffer_raw;
}
}
} else {
# include PHP no soporta el metodo POST
print $writer $self->{'start_script'}.$self->{'out'};
}
close $writer;
( run in 0.779 second using v1.01-cache-2.11-cpan-7fcb06a456a )