CGI でなぜか perl のパスが通らないとき

ときどき忘れて「(#`Д´) もー! なんでだよ〜!!」ってなるので覚書。

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 モードと覚えておくとよいでしょう。

カテゴリーTips

コメントを残す