なぜなにCGI?
天蒼工房の屋根裏に住む、けんたと m's 社長、まゆこ餅のCGI勉強会!
設置の際によくはまるトラブルと対処だ! Home

  『えーん。』
  『どした?』
  『エラーばっか出るよぅ。落とし穴から出られないぃ。もがもが。』
  『うひゃひゃ。どつぼにはまっとるのぅ。』

どつぼ回避法! Top

 さー、みなさんはこのページを待っていたのではねぃでしょうか?おもしろそうな CGI を見つけた!ちょっと変えてみた!さぁ、アップロードだ!って意気込んだものの、なんでかエラーばかり。あれ?どうなってんの?(@_@)となってしまっていつまでたっても動かない。

 ほぼ、はまる落とし穴はここに書いてあります。これを読めば落とし穴にはまる率もぐんと減るし、『わぁ!』ってはまっても どつぼ には至らないはず!

 ■はじめてアップする人はこれをまず作ってみよう!

 初めて設置するサーバーで CGI が動くかどうかも確実でないのに、いきなり複雑な CGI を載せてエラーが出ても、CGI が間違ってるのかそのサーバーの設定が悪いのか原因がわけわかんないよね。じゃあ、原因を切り分けるためにもまずは簡単な CGI を作って走らせてみよー。下のサンプルなんか、いいんじゃない?(笑)
(注)下の1行目は設置するサーバーによって変わることがあるのでプロバイダーに確認してね。
#!/usr/local/bin/perl
print "Content-type: text/html\n\n";
print "<html><head><title>テストだ!</title></head>\n";
print "<body>うりゃぁぁぁぁ けんただ!!</body></html>\n"

 ■ファイルの大文字・小文字はあってます?

 Mac や Windows はファイル名が例えば、『 Kenta.htm 』でも、『 KENTa.hTm 』でも同じと思ってくれる。けれど、UNIX さんは厳しくて、この2つのファイルは全くの別物と認識してしまう。きちんとあわせよう。CGI に限らず、HTML でもこれは同じ。リンク先の GIF ファイル名がリンク指定のファイル名と大文字・小文字が違うだけで何でか表示されないってこと経験したことはないかい?

 ■ファイルのパーミッションはあってるかい?

 FTP ソフトでアップロードしたファイルは、おおかた『644』とかになっている。HTML や GIF ファイルならこれで問題なく見れるんだけど、CGI はファイルに実行権がないと動いてくれない。詳しくは別のところで説明するけど、CGI (拡張子が.cgi や .pl ) は『755』にしよう!
 また、ログファイルなどは、『666』にしないと、掲示板などみんなが書き込めなくなっちゃうぞ!

 ■Perl のパスはあっている?

 これ間違うと、ぜーんぜん動かないよ。普通は
      /usr/local/bin/perl   か   /usr/bin/perl
である。ここに、CGI を動かす、Perl というプログラムがある。でも、サーバーによっては違う場所にあるときなんかもある。そんな場合は、Telnet接続して、
      which perl
とコマンドを打つと、場所がわかるよ。

 ■ASCII モードでアップロードしてます?

 FTP ソフトでアップロードする時、CGI ファイルは HTML ファイルと同じく、ASCII モードでアップしよう!もし、Binary モードでアップしていると、スクリプトがあっていても動かないです。はい。

 ■jcode.pl は持っていますか?

 日本語の漢字コードは迷惑なことに、3種類あったりします。Shift-JIS 、 JIS 、 EUC です。詳しくは『漢字コード』のページで説明しますけど、これらを変換するプログラムがサブルーチン化されてライブラリとして出回っています。これを使えば、毎回プログラムに書かなくても便利ですよね。それが、jcode.pl です。掲示板などはこれを使っているのがほとんどです。これが用意されてないと、エラーがでます。

 ■同階層の相対パスの書き方を変えてみる

 なんだか、おいらは間違ってないのになぁって気にさせられるのがこれ。同じ階層のファイルを相対パスで指定するとき、たとえば jcode.pl なんか、
      require 'jcode.pl';
ってしてるのを
      require './jcode.pl';

ってすると動いたりする。やっぱりなんだかなぁ。

 禁無断転載 

天蒼工房