CGIを設置したのに画面が真っ白になる、 500 Internal Server Error が表示される、 ダウンロード画面になってしまう、といったご相談はよくあります。
CGIが動かない原因は1つではなく、 パーミッション、改行コード、Perlのパス、アップロード方法など、 複数の要因が関係していることがあります。
このページでは、レンタルサーバーで CGI が動作しない場合に 特に確認したいポイントを順番にご案内します。
CGIが動かない場合、まずは次のような原因が考えられます。
CGI関連で最も多いエラーの1つが 「500 Internal Server Error」です。
これは「サーバー内部でエラーが発生し、正常に実行できなかった」 という意味で、原因は1つに限定されません。
たとえば次のような場合に発生します。
そのため、500エラーが出た場合は 「スクリプト内容だけが原因」とは限らず、 設置方法やファイル形式も含めて確認する必要があります。
CGIファイルには実行権限が必要です。 そのため、通常は 755 に設定します。
chmod 755 script.cgi
HTMLファイルやPHPファイルは 644 が基本ですが、 CGIは実行する必要があるため同じ設定では動作しないことがあります。
また、設置ディレクトリ側のパーミッションも重要です。 通常はディレクトリを 755 に設定します。
chmod 755 cgi-bin
CGIが動かない場合に、原因確認をせず 777 にする方法はおすすめできません。
セキュリティ上の理由からも、まずは適切な設定値を確認してください。
パーミッションの基本については次のページもご参照ください。
Perl CGIでは、ファイルの1行目に実行する Perl の場所を記述します。 この行を「shebang(シェバン)」と呼ぶことがあります。
例としては次のような記述です。
#!/usr/bin/perl
このパスが実際のサーバー環境と一致していない場合、 CGIは正常に実行できません。
たとえば、配布元のサンプルCGIに別サーバー用のパスが書かれていることがあります。
#!/usr/local/bin/perl
このような場合は、ご利用サーバーの環境に合わせて修正が必要です。
CGI配布元の説明に記載されている Perl のパスがそのまま使えるとは限りません。
設置前に、先頭行を必ず確認してください。
Windowsのメモ帳や一部のエディタで編集したファイルは、 改行コードが Windows形式(CRLF)になっていることがあります。
この状態のまま CGI をアップロードすると、 1行目の Perl パスが正しく解釈されず、 500エラーになることがあります。
そのため、CGIファイルは UNIX形式(LF)の改行コードで保存するのが基本です。
エディタで保存形式を変更できる場合は、 LF にして保存してください。
FTPソフトやSFTPソフトの設定によっては、 アップロード時の転送モードが影響する場合があります。
特に CGI やテキストファイルは、 環境によってはアスキーモードでの転送が推奨される場合があります。
一方で、画像ファイルや圧縮ファイルはバイナリ転送が必要です。
| ファイル種類 | 主な転送方法 |
|---|---|
| CGI / HTML / TXT | アスキー |
| 画像 / ZIP / PDF | バイナリ |
現在のソフトでは自動判別機能がある場合もありますが、 CGIが正常に動作しない場合は転送設定も確認してください。
CGIのファイル名や配置場所が誤っていると、正常に動作しないことがあります。
たとえば、説明書では cgi-bin に置く前提なのに、 別のディレクトリへアップロードしている場合があります。
また、ファイル名の大文字・小文字が異なると、 Windowsでは気付きにくくてもサーバー上では別ファイルとして扱われます。
CGIファイルの先頭に空行が入っていたり、 保存時に不要な文字が付いていると正常に動作しないことがあります。
特に 1行目の Perl パスの前に空白行があると問題になります。
ファイルの先頭は、次のように Perl パスから始まる形にしてください。
#!/usr/bin/perl
また、文字コードの違いや、保存時のBOMの有無が影響する場合もあります。
CGIの中身に文法エラーがある場合も、当然ながら正常に実行できません。
たとえば次のような原因があります。
配布CGIを少しだけ修正したつもりでも、 1文字の違いで動かなくなることがあります。
変更前は動いていた CGI が、編集後に動かなくなった場合は、 最後に変更した箇所を中心に見直すのが近道です。
古い CGI や配布スクリプトでは、 Shift_JIS や EUC-JP など特定の文字コードを前提にしている場合があります。
そのため、UTF-8 で保存し直した結果、 文字化けやエラーにつながることもあります。
逆に、UTF-8前提の CGI を別の文字コードで保存すると不具合の原因になります。
スクリプトの説明書がある場合は、 推奨文字コードも確認してください。
CGIは1つのファイルだけで動作するとは限りません。
テンプレートファイル、設定ファイル、ログ保存用ディレクトリなどが 別途必要な場合があります。
配布元の説明に「data フォルダを作成してください」 「log ディレクトリを作成してください」などの記載がある場合は、 その内容も確認してください。
お問い合わせフォームなどで CGI を利用している場合は、 HTML側の記述ミスも原因になることがあります。
たとえば form タグの action が間違っている、 ファイル名の指定が違う、必須項目名が一致していない、などです。
<form action="/cgi-bin/formmail.cgi" method="post">
CGI本体ではなく、呼び出し元のHTML側にも問題がないか確認してください。
CGIが動かない場合、あれもこれも一度に変更すると 原因が分からなくなりやすくなります。
そのため、次の順番で1つずつ確認する方法がおすすめです。
特に多い確認ポイントをまとめると、次の通りです。
このあたりを確認することで、 多くの CGI トラブルは原因を絞り込みやすくなります。
あわせて次のサポートページもご確認ください。
WISNETでは用途に合わせて2つのレンタルサーバープランをご用意しています。