さくらサーバーでCGIが動かなかったときのメモ
さいきんはPHPスクリプトを利用することが多いのでCGIプログラムはあまり設置しないんだけど、久しぶりに設置したら500サーバーエラーでしばらく悩んだので解決策をメモ。
Perlのパスもあっている、パーミッションもあっている、とくにへんな.htaccessも記載していない、なのに500エラー。
さくらのコンパネからエラーログを見ると、以下のような記述が。
[Sat Jun 03 17:13:43 2017] [error] [client IP] suexec failure: could not open log file
[Sat Jun 03 17:13:43 2017] [error] [client IP] fopen: Permission denied
[Sat Jun 03 17:13:43 2017] [error] [client IP] Premature end of script headers: (CGI script file name)
ピンポイントで原因解説しているサイトがありました。ありがとうございます。
(参考)http://d.hatena.ne.jp/otn/20090818/p1#20090818f1
CGIプログラムの改行コードがDOS(CRLF)の場合、1行目のCRがパス名にくっついてしまっているため、CGIのパスとして認識されずエラーが起こる、と。
対処法は、1行目のパスに半角とハイフンを2つ入れる。
#! /usr/bin/perl --
こうすると何故か直る。
ちなみに。
- CR : キャリッジリターン(先頭にカーソルを戻す)
- LF : ラインフィード(改行する)