CGIプログラムでエラーが発生する

Internal Server Error というメッセージが表示される

原因1実行ファイルまたはディレクトリのパーミッションが間違っている
対策1

ファイルおよびディレクトリのパーミッションを正しく設定してください。

CGI (Perl, Ruby, Python)

PHP

原因2インタプリタのパスが間違っている
対策2

インタプリタ行(CGIスクリプトの1行目)を正しく記述してください。

CGI (Perl, Ruby, Python)

原因3スクリプトの改行コードが正しくない
対策3
  • テキストエディタでCGIスクリプトを編集した時に改行コードが変更されることがあります。改行コードは<LF>または<CR+LF>にしてください。
  • FTPでファイルを転送した時に改行コードが変換されることがあります。アスキーモードで転送して不具合が生じる場合は、バイナリモードで転送してみてください。
原因4インタプリタのアップデートで仕様が変わった
対策4-1

Perl5.22以降では、 defined(@array) および defined(%hash) は致命的なエラーになりました。この仕様変更によりPerlライブラリ jcode.pl はエラーを発生します。 jcode.pl の682行目辺りのコードを次のように修正することでエラーを回避することができます。

修正前

sub z2h_euc {
    local(*s, $n) = @_;
    &init_z2h_euc unless defined %z2h_euc;
    $s =~ s/($re_euc_c|$re_euc_kana)/
    $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
    /geo;
    $n;
}
   
sub z2h_sjis {
    local(*s, $n) = @_;
    &init_z2h_sjis unless defined %z2h_sjis;
    $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
    $n;
}

修正後

sub z2h_euc {
    local(*s, $n) = @_;
    &init_z2h_euc unless %z2h_euc;
    $s =~ s/($re_euc_c|$re_euc_kana)/
    $z2h_euc{$1} ? ($n++, $z2h_euc{$1}) : $1
    /geo;
    $n;
}
   
sub z2h_sjis {
    local(*s, $n) = @_;
    &init_z2h_sjis unless %z2h_sjis;
    $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo;
    $n;
}

対策4-2

Perl5.26以降では、外部ファイルを読み込む際の検索パス(@INC)からカレントディレクトリ(.)が削除されました。この仕様変更によりカレントディレクトリのライブラリやモジュールが読み込めなくなる場合があります。

スクリプトの先頭に次の2行を追加することで、検索パスにカレントディレクトリを含めることができます。

#!/usr/local/bin/perl

use FindBin;
use lib $FindBin::Bin;

対策4-3

新しいバージョンのインタプリタに対応することが困難な場合は古いバージョンのインタプリタを使用することで解決することがあります。

CGI (Perl, Ruby, Python)

原因5.htaccessのエラー
対策5

.htaccessファイルの記述ミスで Internal Server Error が発生することがあります。同じディレクトリのHTMLファイルにアクセスしてもエラーが発生する場合は、これが原因です。.htaccessファイルの記述を見直してください。

真っ白いページが表示される

原因1PHPプログラムのエラー
対策1

PHPの初期設定ではエラー表示が Off になっています。.user.ini ファイルでエラー表示を On にしてエラーが表示される場合は、そのメッセージに従って問題を解決してください。

.user.iniの設定例

display_errors = On

PHP > PHPの設定ファイル