ときどき忘れて「(#`Д´) もー! なんでだよ〜!!」ってなるので覚書。
CGI を設置していて、間違いなく書けているはずなのに、なぜか perl のパスが通らないことがあります。そこでふと思い出すのが「改行コード」。
それぞれのシステムが使う改行コードは次のとおりですが、
- LF:UNIX系
- CR:Mac
- CR+LF:Windows
#! /usr/bin/perl
パスに↑この様に書いてあっても、実際は最後に改行コードが入っていて、そのコードの取り扱いがサーバーとクライアントで違うとエラーになってしまいます。例えば改行コードに CRFL を使うと、UNIX では LF だけで改行コードとみなされるので、CR があまっておかしくなってしまいます。そこで、改行コードが CRLF (\r)になっている場合、UNIX系相手なら LF(\n)に変えればいいのです。
#! /usr/bin/perl\r
↓
#! /usr/bin/perl\n
ちなみに、改行コードはそのままで、かわりに「 –」を加える民間療法も存在しました。
参考:CGI 界にはびこる民間療法
それから、FTP で転送するときの設定も見直しましょう。
- Asciiモード:Asciiコード(テキスト)を転送するためのモードで、改行コードを変換してくれる。
- binaryモード:binaryファイルを転送するためのモードで、改行コードを変換しない。
.html、.txt、.cgi、.pl などは Ascii モード、画像などは binary モードと覚えておくとよいでしょう。