古いCGIが動かない・500エラーでの対応方法 jcode.pl timelocal.pl perl5 以降の場合
投稿: 更新:2019/11/25
新しいサーバーに移設した際に、CGIが動作しない。
perl4のサーバーから、perl5.xx のサーバーへ移動した際に、エラーで動作しなくなりました。
※パーミッションに関しては、各サーバーにてご確認ください。(サーバー環境としてCGIが動作する状態でのエラーが前提です)
jcode.plでのエラー
古いCGIを使用していたのですが、下記のようなエラーで動作しませんでした。
エラーの内容
defined(%hash) is deprecated at jcode.pl line xxx
【エラーのjcode.pl の記述】
(xxx行目からの記述)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
sub z2h_euc { local(*s, $n) = @_; &init_z2h_euc unless defined %z2h_euc_inited; $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_inited; $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; $n; } |
上記エラーになる記述を以下に変更することでエラーが解消されました。
【変更後のjcode.pl の記述】
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sub z2h_euc { local(*s, $n) = @_; &init_z2h_euc if !%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 if !%z2h_sjis; $s =~ s/($re_sjis_c)/$z2h_sjis{$1} ? ($n++, $z2h_sjis{$1}) : $1/geo; $n; } |
参照:https://piano2nd.smb.net/PukiWiki/index.php?jcode.pl
timelocal.plのエラー
エラーの内容
Can’t locate timelocal.pl in @…
timelocal.pl は、perl4でのモジュールで perl5.xx では動作しない為、以下のように変更しました。
【エラー時の記述】
1 |
require "timelocal.pl"; |
上記の記述があるファイルを以下の記述に変更
【変更後の記述】
1 |
use Time::Local; |
今回は上記で解決しました。めでたしめでたし。