« EmEditorと補助漢字 | トップページ | Perl/CGIでデータの改行コードが0x0D0x0D0x0A(\r\r\n)になった場合の原因と対策 »

2008/01/30

MacOSX+Web共有でPerl/CGIをプログラムする際に注意すべきこと

富士通WEB MART(SOHO・法人)
WindowsでApacheをインストールして、ローカルのテストサーバを運営していると、実にプログラムのテストが容易です。その便利さにかまけて、基本的なことを忘れてしまっていたことが原因ではまった現象がつい先日ありました。

基本的に、Windows XPもしくはVistaでテストすればそれで十分なのですが、現在開発中のプログラムで、MacOSXでのテストをどうしても行ってみる必要が出てきました。その時、非常に初歩的なことで、はまりました。お恥ずかしい話ですが、備忘録として・・・。

1.パーミッションの変更をしないといけない
Windowsでテストをしている場合には、そのようなことを意識せずともテストできますので、最初、eMac(Tiger)で5行程度のCGIプログラムを作成して実行してみると、「403 Forbidden」と言われたので、理由が分からず焦りました。Terminalからファイルのパーミッションを705に変更て、これでOKかと思ったら今度は恐怖の「Internal Server Error」大王の登場です。

2.改行コードはLFに明示的に変換しないと動作しない。
エラーログを見てみると、「[error] (2)No such file or directory」となっています。「そんな(such)ファイルやディレクトリーはない」というのですが、suchが何を指しているのか最初は分かりませんでした。Perlのパスかなと思い、whichコマンドで調べて、「/usr/bin/perl」であることを確認。「おかしいな、あっているのににな」と考えること数分。Perl/CGIの場合、改行コードの問題で動作しないことがあることを、遠い記憶から呼び起こしました。

Windows + Apacheでは、改行コードが「CRLF」のままでも動作します。また、FTPソフトでUnix系サーバに転送した場合、自動的に改行コードを変換してくれるので、「改行コードが問題になっている」ということに全然気づきませんでした。

Jedit Xでプログラムしていて、デフォルトのまま使っていたので、改行コードがCRになっていることに気づきませんでした(もちろん、別に、Jedit Xの責任ではないですけど)。改行コードをLFに変更したところ、Internal Server Errorは消えて、無事にプログラムが実行できました。

結局のところ、Windowsでプログラムを作成して、UnixサーバにFTP転送する際に、パーミッションも自動変更してくれますし(NextFTPでは設定できます。)、改行コードも自動変更してくるので、基本的なことをすっかり忘れてしまっていましたのでした。

|

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/17901174

この記事へのトラックバック一覧です: MacOSX+Web共有でPerl/CGIをプログラムする際に注意すべきこと:

コメント

コメントを書く