mod_perl で exit ― 2006年06月29日 14時54分53秒
mod_perl を使用する場合、通常の exit
関数 (厳密な書き方をするならば CORE::exit
とすべきか?) は使用できず、代わりに Apache::exit
を使用する必要があるらしい。
しかし実際には、Apache::PerlRun
や Apache::Registory
の配下で動作しているスクリプトであるならば、exit
は勝手に Apache::exit
に置き換えて実行してくれるらしく、exit
の通常の使用では自前で置き換える必要はないようだ。
- 聞きかじりのmod_perl (ぴんぽんすくりぷと さま)
- mod_perl クイック・リファレンス (1) / Apache->exit( [DONE] ) (MultiX.jp - ASKN's WebSite さま)
しかし、一つだけ問題が。。。
先日、eval
を使えば CGI プログラムでも die
を効果的に使えちゃうじゃん、という内容の記事を書いたわけだが、mod_perl を使用する環境で、Apache::Registory
によって動作するスクリプトとしてプログラムを書く場合、eval
に指定するブロック内で (もしくはそこから呼ばれる関数内で) exit
関数を使うと、eval
は CORE::exit
が呼ばれたものと判断し、エラーとして処理しちゃうようなのだ。
対策としては、return
で済むなら済ませるようにするか、
してしまうこと。但し後者は頻繁に修正しテストする場合にはしょっちゅう apache を restart せなあかんかも知れんし、おいらみたいに mod_perl としてでなくても動作するようなプログラムを書こうとしている場合には使えない (use Apache 'exit';
use
は if
文使って分岐しても必ず実行されちゃうからね) という罠。いや、ていうかもちっといい手はないのかね。まぢで。
ヘッダーいぢるのかよ_| ̄|............◎ ― 2006年06月29日 23時51分56秒
某 Tok2 の無料鯖に CGI の設置作業をやっているのだが、こいつが吐き出すはずのクッキーがブラウザに上手く飲み込まれない。おかげで認証は通過するのにしつこくパスワードを聞いてくるというふざけた動作をしやがる。なんでだろーと思いつつ、
で生テキスト吐き出すテストプログラムをなんとなーく置いて動かしてみたら、改行されるはずのテキストが改行されない上にバナーとかもしっかり表示されやがる。Content-type: text/plain
まぁそういうことなんだろーなーということはうすうす感づいてはいたんだが、よーするにこの鯖は CGI が吐き出す HTTP ヘッダを勝手に書き換えてしまうわけなんだ罠。どーりでクッキーが書き込めないわけだ。仕方ないから Javascript 使うかな? あるいはもうめんどいから hidden 使うか。。。いや、 hidden 使うほうがむしろめんどいや、修正量多くなっちゃうし。('A`)=3
最近のコメント