1. Problem Description:

I have trouble getting iniformation from CGI-forms sent by HTTP/POST. To reproduce 
the problem; use the testpackage I've written and included in section 5 of this 
mail. I've also included what I've found relevant from my mod_perl/Apache-setup 
in section 4.

My observation is that there is no problem using GET to transfer form-data,
but no data at all is avaliable through $q->param when using POST.

I have tested this with different versions of mod_perl (1.99_09, snapshot
from cvs this sunday and finally 1.99_10 released yesterday) and CGI.pm
(2.93, 3.00) - as for now I run mod_perl 1.99_10 and CGI.pm 3.0.

If there is something in my setup that causes this, please point me in the
right direction or maybe towards the right documentation. - It is not
totally neccessary for me to use CGI.pm, the most important is to receive
the data ;)

Best regards,
Christian





2. Used Components and their Configuration:

*** mod_perl version 1.9910

*** using /usr/lib/perl5/vendor_perl/5.8.0/i686-linux/Apache2/Apache/BuildConfig.pm
*** Makefile.PL options:
  MP_APXS         => /usr/sbin/apxs2
  MP_AP_PREFIX    => /usr
  MP_COMPAT_1X    => 1
  MP_DEBUG        => 1
  MP_GENERATE_XS  => 1
  MP_INST_APACHE2 => 1
  MP_LIBNAME      => mod_perl
  MP_TRACE        => 1
  MP_USE_DSO      => 1


*** /usr/sbin/apache2 -V
Server version: Apache/2.0.47
Server built:   Sep 27 2003 22:37:55
Server's Module Magic Number: 20020903:4
Architecture:   32-bit
Server compiled with....
 -D APACHE_MPM_DIR="server/mpm/prefork"
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT="/usr"
 -D SUEXEC_BIN="/usr/sbin/suexec2"
 -D DEFAULT_PIDLOG="/var/run/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_LOCKFILE="/var/run/accept.lock"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="/etc/apache2/conf/mime.types"
 -D SERVER_CONFIG_FILE="/etc/apache2/conf/apache2.conf"


*** /usr/bin/perl -V
Summary of my perl5 (revision 5.0 version 8 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.4.23-pre5-ih, archname=i686-linux
    uname='linux admin.interhost.no 2.4.23-pre5-ih #8 sat sep 27 17:13:24 cest 2003 
i686 gnulinux '
    config_args='-des -Darchname=i686-linux -Dcc=gcc -Dprefix=/usr -Dvendorprefix=/usr 
-Dsiteprefix=/usr -Dlocincpth=  -Doptimize=-O3 -march=pentium4 -funroll-loops 
-fprefetch-loop-arrays -pipe -Duselargefiles -Dd_dosuid -Dd_semctl_semun 
-Dscriptdir=/usr/bin -Dman3ext=3pm -Dcf_by=Gentoo -Ud_csh -Di_gdbm -Di_db -Di_ndbm'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef
    useperlio=define d_sfio=undef uselargefiles=define usesocks=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='gcc', ccflags ='-DPERL5 -fno-strict-aliasing -D_LARGEFILE_SOURCE 
-D_FILE_OFFSET_BITS=64',
    optimize='-O3 -march=pentium4 -funroll-loops -fprefetch-loop-arrays -pipe',
    cppflags='-DPERL5 -DPERL5 -fno-strict-aliasing'
    ccversion='', gccversion='3.2.3 20030422 (Gentoo Linux 1.4 3.2.3-r1, propolice)', 
gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=1234
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8
    alignbytes=4, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lpthread -lnsl -lndbm -lgdbm -ldb -ldl -lm -lc -lcrypt -lutil
    perllibs=-lpthread -lnsl -ldl -lm -lc -lcrypt -lutil
    libc=/lib/libc-2.3.2.so, so=so, useshrplib=false, libperl=libperl.a
    gnulibc_version='2.3.2'
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fpic', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl): 
  Compile-time options: USE_LARGE_FILES
  Built under linux
  Compiled at Sep 28 2003 20:17:30
  %ENV:
    PERL_LWP_USE_HTTP_10="1"
  @INC:
    /etc/perl
    /usr/lib/perl5/site_perl/5.8.0/i686-linux
    /usr/lib/perl5/site_perl/5.8.0
    /usr/lib/perl5/site_perl
    /usr/lib/perl5/vendor_perl/5.8.0/i686-linux
    /usr/lib/perl5/vendor_perl/5.8.0
    /usr/lib/perl5/vendor_perl
    /usr/lib/perl5/5.8.0/i686-linux
    /usr/lib/perl5/5.8.0
    /usr/local/lib/site_perl
    .


3. This is the core dump trace: (if you get a core dump):

  [CORE TRACE COMES HERE]

This report was generated by -e on Tue Sep 30 12:02:35 2003 GMT.






4. My Apache configuration (relevant parts)

----BEGIN mod_perl.conf -----
<IfDefine PERL>
  <IfModule !mod_perl.c>
    LoadModule perl_module    extramodules/mod_perl.so
  </IfModule>
</IfDefine>

<IfModule mod_perl.c>
  #PerlTrace all
  PerlRequire "/etc/apache2/conf/modules.d/apache2-mod_perl-startup.pl"
</ifModule>
----END mod_perl.conf -----


----BEGIN /etc/apache2/conf/modules.d/apache2-mod_perl-startup.pl -----
use Apache2 ();

# enable if the mod_perl 1.0 compatibility is needed
#use Apache::compat ();

use ModPerl::Util (); #for CORE::GLOBAL::exit

use Apache::RequestRec ();
use Apache::RequestIO ();
use Apache::RequestUtil ();

use Apache::Server ();
use Apache::ServerUtil ();
use Apache::Connection ();
use Apache::Log ();

use APR::Table ();

use ModPerl::Registry ();

use Apache::Const -compile => ':common';
use APR::Const -compile => ':common';

1;
----END /etc/apache2/conf/modules.d/apache2-mod_perl-startup.pl -----


----BEGIN sample from commonapache2.conf -----
        <IfModule mod_perl.c>
                PerlOptions +GlobalRequest
                PerlModule CGItest
                <Location /CGItest>
                        SetHandler modperl
                        PerlResponseHandler CGItest
                </Location>
        </IfModule>
----END sample from commonapache2.conf -----





5. Test module
----BEGIN CGItest.pm ----
package CGItest;

use strict;
use Apache::RequestRec ();
use Apache::RequestIO ();

use Apache::Const -compile => qw(OK);

use CGI 3.0; CGI->compile;

sub handler {
        my $r = shift;
        my $q = CGI->new($r);

        $r->content_type('text/html');
        my @out = ('<html><body>',
                        '<h1>CGItest</h1>',
                        '<h2>GET-parameters</h2>',
                        '<table>','<tr><th>Key</th><th>Value</th></tr>');
        foreach my $param ($q->url_param) {
                push @out, 
('<tr><td>'.$param.'</td><td>'.$q->url_param($param).'</td></tr>');
        }
        push @out, ('</table>',
                        '<h2>POST-parameters</h2><h3>(GET-parameters when there is no 
POST-parameters)</h3>',
                        '<table>','<tr><th>Key</th><th>Value</th></tr>');
        foreach my $param ($q->param) {
                push @out, 
('<tr><td>'.$param.'</td><td>'.$q->param($param).'</td></tr>');
        }
        push @out, ('</table>');
        
        push @out, ('<h2>GET-form</h2>',
                        '<form action="/CGItest" method="get" 
enctype="application/x-www-form-urlencode">',
                        '<table>',
                        '<tr><td>GET-a</td><td><input type="text" 
name="GET-a"></td></tr>',
                        '<tr><td>GET-b</td><td><input type="text" 
name="GET-b"></td></tr>',
                        '</table>',
                        '<input type="submit" value="GET">',
                        '</form>');

        push @out, ('<h2>POST-form</h2>',
                        '<form action="/CGItest" method="post" 
enctype="application/x-www-form-urlencode">',
                        '<table>',
                        '<tr><td>POST-a</td><td><input type="text" 
name="POST-a"></td></tr>',
                        '<tr><td>POST-b</td><td><input type="text" 
name="POST-b"></td></tr>',
                        '</table>',
                        '<input type="submit" value="POST">',
                        '</form>');

        push @out, ('<h2>Combined GET/POST-form</h2>',
                        '<form action="/CGItest?GET=combined" method="post" 
enctype="application/x-www-form-urlencode">',
                        '<table>',
                        '<tr><td>POST-i</td><td><input type="text" 
name="POST-i"></td></tr>',
                        '<tr><td>POST-ii</td><td><input type="text" 
name="POST-ii"></td></tr>',
                        '</table>',
                        '<input type="submit" value="GET/POST">',
                        '</form>');
        
        push @out, ('</body></html>');
        $r->print(join("\n",@out));     
        return Apache::OK;
}
1;
----END CGItest.pm ----

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to