CGIが動かない場合の確認ポイント

CGIを設置したのに画面が真っ白になる、 500 Internal Server Error が表示される、 ダウンロード画面になってしまう、といったご相談はよくあります。

CGIが動かない原因は1つではなく、 パーミッション、改行コード、Perlのパス、アップロード方法など、 複数の要因が関係していることがあります。

このページでは、レンタルサーバーで CGI が動作しない場合に 特に確認したいポイントを順番にご案内します。

まず確認したい主な原因

CGIが動かない場合、まずは次のような原因が考えられます。

✔ まずはここから
CGIが動かない場合は、いきなり内容を大きく書き換えるのではなく、 パーミッション、Perlパス、改行コードの3点を先に確認すると原因を切り分けやすくなります。

500 Internal Server Error とは

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 にする方法はおすすめできません。
セキュリティ上の理由からも、まずは適切な設定値を確認してください。

パーミッションの基本については次のページもご参照ください。

パーミッション設定の基本(755 / 644 / 600)

Perlのパスを確認する

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 にして保存してください。

✔ よくある原因
CGIの内容自体は正しいのに動かない場合、改行コードが原因になっていることがあります。 特に Windows で編集した後にアップロードした場合は要確認です。

アップロード方法を確認する

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側にも問題がないか確認してください。

確認は1項目ずつ行うのがおすすめです

CGIが動かない場合、あれもこれも一度に変更すると 原因が分からなくなりやすくなります。

そのため、次の順番で1つずつ確認する方法がおすすめです。

  1. パーミッションを確認する
  2. Perlのパスを確認する
  3. 改行コードを確認する
  4. アップロード設定を確認する
  5. 配置場所とファイル名を確認する
  6. スクリプトの内容を見直す
✔ 確認のコツ
CGIが動かないときは、設定を一気に変えるのではなく、 1つ直したら確認、また1つ直したら確認、という流れで進めると原因を特定しやすくなります。

よくある対処のまとめ

特に多い確認ポイントをまとめると、次の通りです。

このあたりを確認することで、 多くの CGI トラブルは原因を絞り込みやすくなります。

関連ページ

あわせて次のサポートページもご確認ください。

WISNETでは用途に合わせて2つのレンタルサーバープランをご用意しています。

サポート情報

サポート情報トップ