मैं अपने स्थानीय एमएएमपी apache2 सर्वर पर चल रहे एक पूर्व-मौजूदा PERL वेब एप्लिकेशन को प्राप्त करने का प्रयास कर रहा हूं और मुझे पोस्ट डेटा प्राप्त करने में समस्याएं आ रही हैं। ऐप $cgi->param
से डेटा हथियाने की कोशिश करने के लिए cgi.pm का उपयोग करता है, लेकिन x-www-form-urlencoded
प्रारूप में ठीक से प्रारूपित पोस्ट डेटा भेजे जाने पर भी परम हमेशा खाली रहता है।
इसके अतिरिक्त, STDIN
हमेशा खाली रहता है और यदि पहले से \* नहीं है तो एक त्रुटि उत्पन्न करता है।
Hello-world-form.cgi:
#!/[localpath]/perl5/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
print "Content-type: text/html\n\n";
print qq(
<!doctype html>
<html>
<body>
<form action=\"hello-world.cgi\" method=\"POST\">
<input type=\"text\" name=\"myparam\" />
<input type=\"submit\" value=\"submit post var\" />
</form>
</body>
</html>
);
हैलो-world.cgi:
#!/[localpath]/perlbrew/perls/perl-5.24.0/bin/perl -d
use strict;
use warnings;
use CGI;
my $q = CGI->new();
print "Content-type: text/html\n\n";
print "<p>key = " . $q->param('myparam') . "</p>\n"; #this is always empty
my @names = $q->param;
foreach my $name (@names) {
print "<p>$name = " . $q->param($name) . "</p>"; #this never runs
}
my $postdata = '';
my $in = \*STDIN;
my $bytes = read($in, $postdata, $ENV{'CONTENT_LENGTH'});
print "<p>postdata = $postdata</p>\n"; # postdata is empty
print "<p>content length = " . $ENV{'CONTENT_LENGTH'} . "</p>\n"; # this number seems correct
foreach my $key (keys %ENV) {
print "<p>$key --> $ENV{$key}</p>\n"; # nothing special here
}
Httpd.conf:
...
LoadModule cgi_module modules/mod_cgi.so
LoadModule perl_module modules/mod_perl.so
...
ScriptAlias /cgi-bin/ "/[siteroot]/cgi-bin/"
Alias /perl/ "/Applications/MAMP/cgi-bin/"
<IfModule perl_module>
PerlModule ModPerl::Registry
<Location /perl>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
Options +ExecCGI
</Location>
</IfModule>
मैं इन मॉड्यूल के साथ perlbrew के माध्यम से PERL v5.24.0 चला रहा हूँ:
> perlbrew list-modules
CGI
Date::Parse
Encode::Locale
HTML::Parser
HTML::Tagset
HTTP::Date
HTTP::Message
IO::HTML
LWP::MediaTypes
Perl
Sub::Uplevel
Test::Deep
Test::Needs
Test::NoWarnings
Test::Warn
Try::Tiny
URI
कोई विचार?
1 उत्तर
शेबैंग से -d
को हटाने से यह समस्या हल हो जाती है। उत्तर के लिए कुडोस टू कोरियन।
संबंधित सवाल
नए सवाल
apache
Apache HTTP सर्वर से संबंधित प्रोग्रामिंग सवालों के लिए इस टैग (उपयुक्त प्रोग्रामिंग-भाषा टैग के साथ) का उपयोग करें। अन्य Apache Foundation उत्पादों के बारे में प्रश्नों के लिए इस टैग का उपयोग न करें। ध्यान दें कि सर्वर कॉन्फ़िगरेशन प्रश्न आमतौर पर https://serverfault.com पर बेहतर होते हैं