mod_perl und HTTP-Header
Lin
- perl
Hi,
Ich habe mehrere (teilweise Verständnis-) Fragen zu HTTP-Headern
und mod_perl.
Ich habe meine Site lokal auf meine Windows-Kiste entwickelt und nun
versucht auf dem Live-Server (Debian) zum laufen zu bringen.
So weit so gut.
-- System lokal --
Windows XP
Apache/2.0.54 (Win32)
mod_perl/2.0.2
Perl/v5.8.8
-- Live-Server --
Debian
Apache/2.0.54
mod_perl/1.999.21
Perl/v5.8.4
Mein mod_perl Setup:
<Files ~ "\.(html|pl|pm)$">
SetHandler perl-script
PerlHandler ModPerl::Registry
PerlSendHeader Off
</Files>
Nun geht es darum, wie ich die HTTP-Header korrekt versende.
Früher habe ich das über ein einfaches print gemacht:
print "Content-Type: text/html\r\n\r\n";
print $content;
Jetzt, unter mod_perl so:
my $r = shift if ($ENV{MOD_PERL});
$r->headers_out->{'Content-Type'} = "text/html; charset=ISO-8859-1");
print $content;
Und bei einem Redirect:
$r->err_headers_out->add('Set-Cookie' => $app::objSession->getCookieCGI());
$r->headers_out->set(Location => "http://www.example.com/");
$r->status(Apache2::Const::REDIRECT);
Alles unter mod_perl2 wohlgemerkt. Das ganze funktioniert auf dem Live-Server
mit mod_perl 1.999 nicht richtig. Zwar werden der Content-Type wohl gesetzt
(durch PerlSendHeader?), bloss das mit den Redirects functioniert nicht.
Seite bleibt weiss, in der error.log kommt nichts an.
Jetzt habe ich PerlSendHeader auf "On" gestellt und es wieder auf die
print-Methode umgestellt:
print "Location: http://www.example.com/\n\n";
Nun meine Fragen:
1. Was genau macht PerlSendHeader? Hab ich mit "On" trotzdem die Möglichkeit,
HTTP-Status-Codes zu setzen (Apache2::Const::REDIRECT)?
2. Gibt es eine Methode, die in mod_perl 1+2 funktioniert? Bzw. wie würdet
ihr das Ganze angehen.
3. Wie kann ich auf einem Debian von mod_perl 1.999 auf 2.0.2 upgraden?
Meine Versuche mit der cpan-Konsole sind gescheitert, weil er sagt ich soll
zuerst meine alte mod_perl Version runterhauen, das konfliktverursachende
File + Verzeichnis seien 'Apache2.pm' und 'Apache2/*'.
Wenn ich die Sachen aber davor lösche, lässt sich Apache nicht neu starten,
weshalb die mod_perl-Tests fehlschlagen und es zu keiner Installation kommt.
4. Kann jemand meine Grad der Verwirrung reduzieren? Wird alles gut?
Danke für eure Antworten,
Lin
Hey,
es gibt keine Möglichkeit, deinen existierenden Code unter beiden gleichartig laufen zu lassen.
http://perl.apache.org/dist/mod_perl-2.0-current/Changes
=item 1.999_22 - April 14, 2005
******************** IMPORTANT ********************
this version of mod_perl is completely incompatible
with prior versions of mod_perl, both 1.XX and
1.99_XX. Please read the below changes carefully.
***************************************************
Da du wohl die Gelegenheit hast, das Zielsystem upzugraden, schlage ich vor, du konzentrierst dich auf diesen Weg, um die Inkompatibilitäten auszuräumen.
ich soll
zuerst meine alte mod_perl Version runterhauen, das konfliktverursachende
File + Verzeichnis seien 'Apache2.pm' und 'Apache2/*'.
Wenn ich die Sachen aber davor lösche
Wie stellst du das an? Löscht du die Dateien manuell?
Unter RH9 entfernte ich einfach das Paket für mod_perl2 und installierte dann von den Quellen, aber nicht über CPAN, sondern wie ab http://apache.perl.org/docs/2.0/user/install/install.html#Dynamic_mod_perl beschrieben. Das funktionierte gut.
Hi,
Danke für deine Antwort.
Habs jetzt geschafft, mod_perl2 zu installieren. Hoffe jetzt klappts.
Ciao,
Lin