in reply to Re: CGI::Simple POST data trouble
in thread CGI::Simple POST data trouble
A) Are you using mod_perl or not?
Yes. I've been reading the CGI::Simple docs carefully, and you probably know what it says about working alongside mod_perl:
This module uses Selfloader and the __DATA__ token to ensure that only code that is used gets complied. This optimises performance but means that it will not work under mod_perl in its default configuration. To configure it to run under mod perl you would need to remove two lines from the module.use Selfloader; .... __DATA__
Those two lines are commented in the source code of the module I'm using, so I guess that's enough. As an added bonus, here are the Apache config file and mod_perl startup file I'm using.
In httpd.conf:
<Location /perl-status> SetHandler perl-script PerlHandler Apache::Status Order deny,allow Deny from all Allow from 127.0.0.1 </Location> Alias /perl/ "/path/to/some/folder/" <Location /perl/> Options ExecCGI SetHandler perl-script PerlHandler Apache::Registry PerlHeaderParserHandler "sub { tie *STDOUT, 'Apache' unless tied * +STDOUT; }" PerlSendHeader On Order deny,allow Deny from all Allow from 127.0.0.1 </Location> PerlRequire mod_perl_startup.pl
An explanation on why I have PerlHeaderParserHandler "sub { tie *STDOUT, 'Apache' unless tied *STDOUT; }" can be found here. If that's what's causing the problem, I could compile a working version of mod_perl, no problem. And the deny/allow rules are like that, this is my home machine for personnal development. I don't think that should interfere in any way.
Here's the content of mod_perl_startup.pl:
#!/usr/bin/perl use strict; use lib qw(/usr/local/lib/perl); use CGI::Simple qw(-newstyle_urls); use Apache::DBI(); use DBI(); use DBD::mysql(); 1;
B) The error message from CGI::Simple seems pretty explicit to me. The content-length was 31 but it couldn't read any data from STDIN. This is probably because you can only read data *once* from STDIN, so if anything has read the data from STDIN first, CGI::Simple won't then also be able to read the data.
OK, makes sense
GET type requests don't work like this, as reading the appropate %ENV variable doesn't reset anything. So check to make sure nothing is reading the STDIN before you do -- you might consider scripts started by mod_perl related directives?
As far as I can tell, I have none, except that mod_perl_startup.pl I pasted up there.
C) If you are using mod_perl, I think you want Apache::Request or something similar.
OK, will take a look at that and give it a try. Thanks for the help.
|
|---|