MacでCyberduckを使っている人必見・アップロードしたCGIが動かない時に確認する方法

最近はソーシャルメディアが発達したお陰で、Webチャットの需要は無くなってきているのでしょうか?

以前はwebチャットや掲示板、アクセスカウンターなど、あれほどあったCGIのプログラムを配布するサイトが軒並み閉鎖しています。

そんな中、CGIで動くWebチャットをレンタルサーバー上で稼働させる依頼が個人的にあり、久々にCyberduckを使用してファイルのアップロードだのCGIのパーミッションだのを行って嵌まってしまったメモ書きです。

使ったCGIプログラムは

http://www.kent-web.com

です。

なぜか「500 Internal Server Error」 が表示される

何度やってもエラーでうまく動作しません。

確認した事項は

  • Perlへのパス
  • パーミッション

どちらも問題ありません。

Cyberduckに無かった転送モードの設定

「くま同盟」をブログへ移行する前、CGIでトラブったことは皆無だったため、なぜだろう・・・と途方に暮れようとしていた矢先、あることに気付きました。

Cyberduckにアスキーモードやバイナリモードの転送モードの設定画面が無いことを・・・。

なぜFTPにアスキーモード・バイナリモードがあるのか

バイナリモードはJPGやPNGなどの画像や人間がエディタで見ても何が書いてあるかわからないプログラムの実行ファイルなどを転送する時に使います。

それに対し、CGIなどのスクリプトのプログラムはアスキーモードで転送します。

WindowsやMacとCGIを実行するWebサーバーの改行コードの違い

CGIやPHPなどのプログラムは大抵WindowsやMacで行うかと思います。
それに対し、実際にCGIを実行するWebサーバーは大抵LinuxやBSDなどのunix系のOSを使用します。

  • Windows=CR+LF
  • Mac=CR
  • unix=LF

というようにOSによって改行コードが違います。
Mac上でCRで改行されたCGIプログラムをそのままLinux上にコピーしても改行コードの違いでうまく動作しません。

その改行コードの違いを埋めるためにCGIやPHPなどのスクリプト系のプログラムはアスキーモードで転送します。

Mac上でCRで改行されたCGIプログラムもアスキーモードでLinuxへ転送すると自動的に改行コードをLFに変換され、Linux上でも問題なくCGIが動くというわけです。

Mac上でLFで改行して再挑戦

kentwebさんでは全てのCGIプログラムがWindows上で開発されているのか改行コードがCR+LFでした。

「Cyberduckでアスキーモードで転送できないのなら、Mac上でLFに改行してしまえ」と全てのCGIファイルをLFで改行し上書き保存しました。

改行コードを全て変更後、Cyberduckで再度アップロードしたら何事もなく動作しました。

まとめ

Cyberduckではアスキーモード・バイナリモードの転送の設定ができないため、CGIやPHPのプログラムを転送する時は予め、サーバーの環境(通常のWebサーバーはUnix系のLF)に合わせて改行コードを変更してから転送すること。

David Kocher
posted with iTunesLinker at 15.08.19