気の向くままに辿るIT/ICT/IoT
Perl CGI

Perlサンプルプログラムが動かない時

ホーム前へ次へ
ここでワンポイントレッスン。『Perl CGI動作確認』

Perl CGIがうまく動作しない時には

Perl CGI動作確認

 コマンドプロンプトやコンソール、ブラウザCGIの実行結果がうまく表示されない場合の理由はいくつか考えられます。

 まずはこれまでの設定の確認をしていきましょう。

 もし「表示はされたけど文字化けしてる!」という場合は下記の章をご覧になってみてください。

 (日本語を敢えて使っていない段階では)これはほとんどないと思います。ちょっと難しいという場合は、もっとCGIに慣れてきてからあとでご覧になるといいと思います。

もっとも多いと思われる理由

パスの設定違い

#!/usr/bin/perl

#!/usr/local/bin/perl

...etc.

※パスはウェブサーバの環境に依存するのでサーバ仕様を確認

・1行目にPerl実行ファイルのパスを記述していない

  → Perl実行ファイルのパスを記述

・1行目のPerl実行ファイルパスにうっかり行終端文字[ ; ]

  (半角セミコロン)を入れてしまった

  → 不要な文字を取り除き、正しいPerl実行ファイルパスを記述

・1行目のPerl実行ファイルパスが間違っている

  → 正しいPerl実行ファイルパスを記述

      → # と ! の位置やスペルミスがないかチェック

      → 先頭・末尾などに余計なスペースなどが入っていないかチェック

      (Windowsの場合フォルダの区切りは[¥],UNIX/Linuxの場合[/])

      (ご利用のサーバの仕様がどこかに記述されていると思いますので再確認)

      → サーバの仕様と一致しているかチェック

      → 正しいスペルでファイルパスを記述

モジュール・ファイル読み込み編

・[use]や[require]で取り込んでいるファイル名やパスが間違っている

  → 正しいファイル名やファイルパスを記述

・[use]や[require]で取り込んでいるファイルが存在しない

  → 存在するファイル名を記述

  → 必要なファイルを入手

  → スクリプトと同じディレクトリに対象ファイルをコピーして試してみる

・モジュール(一般的な拡張子[.pm])ではないスクリプトファイル

  (一般的な拡張子[.pl]「.cgi」)を[use]で取り込もうとしている

  → [use]ではなく[require]で取り込む

・モジュールやプラグマ(拡張子[.pm]または拡張子省略)を

  [require]で取り込もうとしている

  → [require]ではなく[use]で取り込む

・取り込むモジュールやスクリプトファイルをダブルクォーテーションで

  括ってしまった

  → [ダブルクォート]ではなく[シングルクォート]にする

・[use]や[require]行の行終端のセミコロンを忘れている

  → セミコロンを付加する( require xxx.pl; )

CGI編

・content-typeの記述が間違っている

・content-typeの最後または別途\nを1つ追加するのを忘れている

(content-typeの後に\nが計2つ必要)

例)

print "content-type: text/html; charset=utf-8\n\n";

または

print "content-type: text/html; charset=utf-8\n";

print "\n";

・サーバ仕様で実行可能なスクリプトの拡張子として含まれていない

  → 拡張子を[.pl]または[.cgi]に変更して実行してみる

スクリプト編

・コマンド行の行終端のセミコロンを忘れている行がある

  → セミコロンを付加する( print "xxx\n"; )

・シングルまたはダブルクォーテーションが対になっていない(記述漏れ)

  → 正しくペアにする

・[ print ]関数など関数名のスペル違い

  [print] ←×全角になっている

  [pirnt] ←×スペルが違う

  [PRINT] ←×大文字になっている

  ...etc.

実行編(コンソール/コマンドプロンプト)

  スクリプトファイルのあるディレクトリでperl、スペースに続けてファイル名を入れて実行してみる

  例) [ perl xxx.pl ]

・指定したスクリプトファイル名が存在しない

  または作成したperlスクリプトファイルがないディレクトリで実行している

  → スクリプトファイルのあるディレクトリに移動して実行してみる

・Perlのパスが通っていない

  → [ パス名 + perl + スクリプトファイル名.拡張子 ]で実行してみる

  例) [ /usr/bin/perl xxx.pl ]

・作成したファイルに実行パーミッションビットを許可していない

  → 確認して実行パーミッションビットを許可してから実行する

  例) [ chmod u+x xxx.pl ]

・カレントディレクトリのパスが通っていない

  → 1つのドット・ピリオドとスラッシュに続けてファイル名で実行してみる

  例) [ ./xxx.pl ]

  → 【非推奨】カレントディレクトリを環境変数PATHに追加する

まさか、そんな!・・・理由

ホームページスペースでCGIが使用不可

・サーバで利用できないスクリプト言語を使用している

・FTPアップロード設定(テキスト/バイナリ等)

 再確認した上でもし表示されなかった場合には、CGIファイルの権限を設定してあげる必要があります。

 ファイルアクセス権限の許可設定はパーミッション設定ともいいます。

パーミッション編

・パーミッションの設定が正しくない

  → perlスクリプトファイルのパーミッション設定を確認

  (FTPやターミナルエミュレータ等でサーバ側のファイルを確認する事)

  (ご利用のサーバ仕様によりますが、[700][705][755]に設定)

パーミッションとは

あなたの作成したCGIファイルに対して

  ・読み取る権限

  ・書き込む権限

  ・実行する権限

  ・USER →ファイル作成者

  ・GROUP→Webサーバ上の同じスペースを共有している人

  ・OTHER→その他のみんな

に許可設定をパーミッション設定ともいいます。

もしかしたら・・・編(ブラウザ)

 (ブラウザで実行の場合)

 上記チェックをしてもどうしてもうまくいかない場合

・Perl実行パスに[半角スペース]に続けて[--](ハイフン2つ)を加え、

  #!/usr/local/bin/perl --

としてみる。

 この設定はまだ少し難しいかなぁと思われる方は、思いきってブラウザで表示するのは後回しにしちゃいましょう。

 再確認ができたあなたの記述したプログラムが原因ではないことは、わかったのですよね。

 いくつかCGIスクリプトをつくってあとで解決する事にしましょう。

 根詰めたり、時間をかけすぎたりすることはあなたの目にも頭にも精神的にも決してよくありません。

 思い切って割り切ることは大切で勇気がいることです。

 そしてあなたにはその勇気があるはずです。

 もちろん以降の章を順を追ってご覧頂ければ、クリアできますので安心してくださいね。

パーミッションにチャレンジ!

Perlプログラミング

Perl文法

ホーム前へ次へ