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