こんにちは!ロリポップCRチームのotomiです。今回はCGIについての記事となります。
CGIファイルをせっかく設置したのに、いざブラウザでアクセスしてみると500エラーになってしまう。そんな場合はこの記事で紹介しているような理由が原因かもしれません。原因と解決方法をご案内します。
- 配布されているCGIファイルを設置しただけなので書かれている内容は間違いないはず
- 他のサーバーや自身のパソコンなどではエラーは発生しない
というように、何が悪いのかがわからない場合にぜひ参考にしてください。
なお、以下のマニュアルを一度ご確認され、改行コード以外の考えられる原因はあらかじめ対応されていることを前提とします。
特に、パーミッションが上記マニュアルで指定されているものでない場合も500エラーとなり、見落としがちな原因です。
CGIの配布元などでパーミッションの指定があっても、いったんは上記マニュアルでご案内しているパーミッションを設定することを試してみてください。
原因
CGIファイルの改行コードが原因になっている可能性が考えられます。改行コードとは、コンピューターなどで改行を表す制御文字(特別な動作をさせるために使う文字)のことです。
改行コードは歴史的な背景により、OSによって異なります。
ロリポップのレンタルサーバーはLinuxという、一般的に家庭で利用されているWindowsやMacなどとは異なるOSを利用しています。Linuxはロリポップ以外のレンタルサーバーでも幅広く利用されているOSです。
Linux、Windows、Macの複数のOSが存在し、それぞれ改行コードも異なっています。
改行コードによってエラーになる理由
たとえばWindowsでは改行コードはCRLF(キャリッジリターン+ラインフィード)となりますが、Linuxでは改行コードはLF(ラインフィード)となっています。
Windowsでは改行として解釈される改行コードであっても、Linuxでは正しく解釈されないことがあります。そのため、CGIファイルにプログラムと無関係な文字が書かれていることになり、それが500エラーの原因になります。
HTMLファイルであれば、どの改行コードであってもブラウザが適切に処理してくれるのですが、CGIファイルはOSに適した改行コードである必要があります。
改行コードは人間の目には見えませんが、ファイルを読み込むコンピューター側としては人間の目に見える文字と同様に扱われます。
人間の目には見えない文字ということが、ファイルを確認してもエラーの原因が特定できない理由のひとつであり、解決を困難にしている理由でもあります。
※改行コードを表示してくれるアプリケーションを利用すれば通常の文字のように見ることが可能になります
解決方法
以下に複数の解決方法を載せています。上から簡単に試せるものになっていますので、まずは上から行っていただき、解決しない場合に次の方法を試してみてください。
※ファイルに使われている文字や環境によっては文字化けが発生し、戻せない可能性があるため、実行前にファイルのバックアップをとっておくことを強く推奨いたします。
ロリポップ!FTPで文字コードを変更する
すでにアップロード済のCGIファイルに対し、ロリポップ!FTPでアクセスし文字コードをあらかじめ表示されている以外の適当なものにいったん変更し、保存することをお試しください。
ロリポップ!FTPのマニュアルはこちらをご参考ください。
文字コードを変更して保存することで、改行コードがLinuxのものに変換されるため、改善することがあります。なお、ファイルに日本語が含まれている場合、上記の手順だけでは文字化けが発生する可能性があります。
もし文字化けが発生した際は、再度最初の文字コードに戻してみてください。
ファイルを編集して改行コードをLFに変更する
最近のテキストエディターには、保存時に改行コードを直接指定できるものがあります。また、テキストエディターによる操作で複数のファイルの改行コードを一括置換でLFに変更できるものもあります。
ご自身で利用されているテキストエディタのマニュアルをご確認いただき、保存時の改行コードの指定や、置換をお試しください。
なお、ファイルを編集して改行コードを変更した場合は、以下の項目を参考にBINARYモードでの転送をお試しください。
ASCIIモードだと意図しない改行コードの変換が行われる可能性があるためです。
FTPソフトのアップロード時の転送モードを見直す
FTPソフトでファイルをアップロードする際、ASCIIモード(テキストモードと言ったりもします)とBINARYモードという2つの転送方法があります。
ASCIIモードとはテキストファイルを転送する際に主に利用されるモード、BINARYモードとは画像などのメディアファイルを転送する際に主に利用されるモードです。
ASCIIモードでは転送時に自動的に適切な改行コードに変換してくれます。BINARYモードでは転送時に改行コードの変換は行われません。
一般的なFTPソフトはファイルの拡張子などから推測して、ASCIIとBINARYのモードを切り替えます。
そのため、以下の順番でそれぞれの転送モードでのアップロードを試していただき、改善するかご確認ください。
- ASCIIモードでアップロードを行い改行コードの自動変換を行う
- あらかじめテキストエディターで改行コードをLinuxのものに変更しておき、BINARYモードでアップロードを行う
なお、FTPソフトによっては改行コードの変換ができない(転送モードを選べなかったり、ASCIIで転送できなかったりする)ものがあるようです。その場合はテキストエディターで改行コードを変更するか、ロリポップ!FTPをご利用いただくようにお願いします。
まとめ
今回は改行コードによってCGIファイルが500エラーになる事象の原因と解決方法をご紹介しました。
- ロリポップのレンタルサーバーはLinuxという、一般的に家庭で利用されているWindowsやMacなどとは異なるOSを利用している
- OSによって改行コードが異なるため、CGIファイルがLinuxの改行コードになっていないとエラーの原因となり得る
- テキストエディターの機能を利用したり、アップロード時に転送モードを指定することで改行コードをOSに合わせたものに変更できる
どうしても改善しない!とお困りの方のお役に立てれば幸いです。