スポンサーリンク

さくらサーバーで枯れたCGIを動かそうとするも500エラー

さくらサーバーで枯れたCGI(perl)を動かそうとするも、500internal server error。
古くから使っているからいい加減エラーなく設定できるようになりたいが、毎度毎度ひっかかる。perlってどうしてこうも繊細なんだろ。KYともいえるが。
要因はこんな感じ。全部試してみる価値ありです。

・cgiファイルのエンコード形式をチェック。SJISで、改行形式がCRLFで動いたが、ご自身の環境に合わせてみる。
LF(ラインフィード)っていうのがLINUX形式で、CR(キャリッジリターン)LFとが混ざっているのがWindows形式なのかね。

・FTPでアップするときにASCIIとバイナリの両方式を試す。自動にしておけば通常良いのだろうけど、どうしてもダメなときは試す。
 ※ASCIIっていうのは、テキストファイルなんかをサーバーの形式(主にLINUXか)に合わせてアップするよ、っていう感じなのかな、簡単に言うと。CR+LFになっちゃっているときに自動でサーバーの仕様に変換してくれるのがASCIIなんだけど、これがうまくいかない場合があるっていう話みたいね。

・パーミッションは705か755。ほとんど755でOKだよね。そんなことないか。

・新しいPerl 5.26.3で動かすと、古いPerlではjcode.plにエラーが出ている可能性も。
「Can't use 'defined(%hash)' (Maybe you should just omit the defined()?)」
っていうエラーがサーバーのログでみるとあったりしない??
さくらサーバーなら、管理画面の「アクセスログの設定」にある「エラーログ」の一番下に出ているはずだよ。
その場合は、jcode.plの中の記述を
&init_z2h_euc unless defined %z2h_euc;

&init_z2h_euc unless %z2h_euc;

&init_z2h_sjis unless defined %z2h_sjis;

&init_z2h_sjis unless %z2h_sjis;
に変更するといいよ。詳しく紹介されているサイトはこちら↓
http://yasuda.homeip.net/insomnia/2017/09/perl-524-cant-use-defined-hash.html

・もうjcode.pl直すのもめんどくさかったら、サーバーのコントロールパネルから、Perlのバージョンを変えてしまうのも方法かも。私はPerl 5.12.5でOKだった。5.14でもだいじょうぶだったよ。

っていう感じか。
毎回失敗して、しぶしぶ上から順に試していくって感じ。だいたいこれで収まるね。

スポンサーリンク