Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3202[/thread]

mod_perl Handler: Handler vor Download schalten?



<< >> 4 Einträge, 1 Seite
bsnoop
 2006-04-12 19:40
#30021 #30021
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Moin,

ich bin gerade dabei mich mit Handlern unter mod_perl zu befassen. Jetzt würde ich gerne vor dem Download einer Datei (in diesem Fall mp3, gilt aber grundsätzlich für jeden anderen Download auch) den Handler arbeiten lassen und wenn er fertig ist soll der Request ganz normal weiterlaufen.

Nun habe ich also folgendes ausprobiert:

Handler:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package Apache::Schnickschnack;

use strict;
use warnings;

use Apache::Const qw(:common);

sub handler {

# mache hier was zu machen ist

return OK;
}
1;


Directive in der httpd.conf:
Code: (dl )
1
2
3
4
5
PerlModule Apache::Schnickschnack
<Files ~ (\.mp3$)>
SetHandler perl-script
PerlResponseHandler Apache::Schnickschnack
</Files>


Das funktioniert leider nicht richtig.
Code: (dl )
# mache hier was zu machen ist
wird zwar korrekt ausgeführt, also beim Anfordern von mp3-Dateien wird der Handler aufgerufen und erledigt auch das was er soll, aber danach wird die Datei nicht ausgegeben. Der Antwort-Header sieht dann so aus:

Code: (dl )
1
2
3
4
5
6
7
8
Date: Wed, 12 Apr 2006 14:29:43 GMT
Server: Apache/2.0.49 (Linux/SuSE)
Content-Length: 0
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Content-Type: audio/mpeg

200 OK


Was mache ich da falsch?\n\n

<!--EDIT|bsnoop|1144856464-->
ptk
 2006-04-12 22:50
#30022 #30022
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Ist der PerlResponseHandler mod_perl2.0-spezifisch? Oder die neue Bezeichnung für PerlHandler?

Bei mod_perl1.x gilt, dass man für die Antwort in einem PerlHandler komplett selbst zuständig ist. Man muss also Header selbst schreiben und den Content selbst ausgeben.
bsnoop
 2006-04-12 23:00
#30023 #30023
User since
2006-03-30
25 Artikel
BenutzerIn
[default_avatar]
Vielen Dank für die Antwort.

Quote
Ist der PerlResponseHandler mod_perl2.0-spezifisch? Oder die neue Bezeichnung für PerlHandler?

Das mit dem PerlResponseHandler hatte ich in der Doku zu mod_perl-2.0 auf apache.org gefunden.

Ich habe das jetzt so gemacht, dass ich ein
Code: (dl )
return DECLINED;
zurückgebe, dann funktioniert es auch. Das schien mir nur zuerst so abwegig, aber in der Verzweiflung probiert man alles ;)

Den header selbst zu bauen und den Content auszugeben hätte ich dann wohl oder übel als nächstes versucht. Ich dachte nur das könne man irgendwie umgehen.

Kann man das mit DECLINED statt OK denn machen? Es funktioniert so ja, aber es kann ja sein dass das unsauber ist oder sonst irgendwelche Nebeneffekte evt. nach sich zieht.
ptk
 2006-04-13 01:22
#30024 #30024
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Wenn ich mich recht entsinne, gibt es drei mögliche Rückgabewerte: OK, DONE und DECLINED. Bei DECLINED wird zum nächsten Handler in der gleichen Phase übergegangen. Bei DONE wird die Phase für abgeschlossen betrachtet. Bei OK weiß ich nicht genau, was passiert. Evtl. ist das von Perl*Handler zu Perl*Handler unterschiedlich.
<< >> 4 Einträge, 1 Seite



View all threads created 2006-04-12 19:40.