CGIプログラムがうまく実行されない

投稿日: 2008年5月17日 | カテゴリ:『自宅サーバー』>トラブルシュート

HTML内のCGIが実行されない、例えばカウンターが表示されない、などのエラーが生じた場合には、次のような原因を疑ってみてください。

  1. HTML内の記述の間違いについて疑ってみる。例えば、カウンターの表示箇所の挿入部分について、cgiプログラムへのパスが通っているかどうか調べてみる。
  2. cgiファイルのパーミッションが実行可能になっているか調べてみる。端末のコマンドライン、ファイルエディタのプロパティ、WinScp3のプロパティなどを使ってファイルの属性を変更できる。
  3. cgiの構文が誤っていないか調べてみる。コマンドラインでCGIファイルをチェックする。
  4. 例:チェックするスクリプト名を test.cgi とするとき、

    [root]# perl -c test.cgi
    

    その他構文をチェックするプログラムとしてWindowsプラットフォームであるがPerl Editorが便利である。

  5. プログラムの改行コードを疑ってみる。
  6. 該当するファイルが存在するディレクトリに移って実際にcgiを実行してみる。もし次のようなエラー表示が出たら、CRコードが邪魔をしてPerlのパスが把握できない可能性が高い。

    [root]# ./test.cgi
    bash: ./test.cgi: /usr/bin/perl^M bad interpreter: 
    そのようなファイルやディレクトリはありません
    

    このような場合次のコマンドを打って内容を確かめる。そうすれば、perlのアドレスを示す部分が次のようになっていることが分かる。

    [root]# cat -tev test.cgi
    #!/usr/bin/perl^M$
    

    この部分だけを直してやれば他の部分はうまく実行されるのでLinuxのエディタでperlのあとの改行コードを一旦デリートして新たに改行してやるとうまくいく。
    もう一度確かめれば次のように^Mがなくなっている。

    [root]# cat -tev test.cgi
    #!/usr/bin/perl$
    

    これで実行してみれば、前のようなエラーコードは現れない。
    このエラーが出るのは、Windows系のPCでプログラムを書いてUNIXの改行コードに変換せずにサーバーに送ってしまった場合によく起こる。プログラムは、サーバーのエディターで書くか、PCの段階でUNIX改行コードに変換できるエディターを使用することでこのエラーを予防することができる(例えば私の場合には、TeraPadというエディターを使用している。このエディターは、文字コードを自動的に判別して読み込んでくれるし、文字コードと改行コードの変換も簡単にできる。MSDOS系でUNIXのプログラムを作成するにはお勧めのエディターである。)。

  7. Fedora 7でSelinuxを有効にした場合、CGIがうまく働かない場合がある。この場合、DisableかPermisiveにする。

関連記事



コメントを残す




空欄に計算式を満たす数値を記入してください(必須)