|
会社のウェブサイトをいじくってたらCGIが動かなくなってしまった。 どうもWindowsマシンからFTPでファイルを転送しているときに、誤ってCGIスクリプトを上書きしたのが いけなかったようで、再度アスキーモードでPerlで書いたスクリプトファイルを転送した。 ところが、何度やっても動いている様子がない。 Apacheのエラーログを見てみると Premature end of script headers
というエラーがダラダラと。。。 よくわからなかったのでネットで調べてみると、はっきりとした原因のつかめないエラーらしい。 たしかに、さっきまでちゃんと動いていたのに、ファイルを転送したとたんにエラーになるなんて おかしいとは感じてた。 だから、転送し直したファイルのパーミッションやらを触っても一向に動く気配がなかった。 いちおう対処法は書いてたのでその方法を試してみた。 その方法というのが、 冒頭の#!/usr/bin/perl のすぐ後に"-"ハイフンを付けるだけ
らしく、ホンマかいな??と疑いつつも、あまり期待せずにやってみたら、 うっそ〜〜〜!!! とりあえず直ったけどいまひとつ釈然としないので、もう一度元に戻して他の方法を探ってみた。 で、いろいろと調べてるときにふと思いついたのだが、FTPの際にWindowsの改行コードCR/LFがうまく処理 されずにそのままになってるのでは? ってことで、早速 cat xxx.cgi | sed -e s/^M//g > yyy.cgi (^Mの入力は ctrl-V → ctrl-Mをタイプ)
すると中身を表示すると見た目は同じでも、wcで比較すると行数分ファイルサイズが減っていた。 ってことはやっぱり改行コードがCR/LFのままだったようだ。 このファイルにパーミッションを正しく設定してブラウザで確認すると、ちゃんとCGIが作動した。 ハイフンひとつで直るのは未だに釈然としないけど、perlのソースなんて見る気しないので だれかがいずれ直してくれることを祈りつつ logout\n
|

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- UNIX




