さくらサーバーで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 : ラインフィード(改行する)