このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

MacPerlを呼び出すタグの付け方教えてください。

発言者:山根
( Date Monday, March 23, 1998 09:19:19 )


マックパールに挑戦しています。ものの本をみてカウンターのCGIを作り、
counter.cgiにしてMacHTTPの中のcgi-binというフォルダにいれました。
ブラウザーからhttp://mydomain/MacHTTP/cgi-bin/counter.cgiとすると
1、2、3と順次表示されます。
htmlを作り、あたは<!--#exe cmd"cgi-bin/counter.cgi"-->番目です。
としても番号が表示されません。
どなたか、教えていただけませんでしょうか?

武藤くん さんからのコメント
( Monday, March 23, 1998 09:53:17 )

グラフィカル・アクセスカウンタ・プロ v2.0を
Macに設置するための説明書ですが、お読みください。
参考になると思います。

→  設置の仕方。

山根 さんからのコメント
( Monday, March 23, 1998 14:14:41 )

武藤くんさんどうもありがとうございました。
下記の説明にそって試してみました。
うまくゆきません。
どうかよろしくお願いします。
●Macで動かすためには

[WebSTAR 2.0J]のW*APIプラブインに“cmd”タグがインプリメント
されていないため使用できない。かわりにW*APIのタグを使用する。
[WebSTAR 2.0J]あるいはMacHTTP2.2.2の設定を変える必要がありますか?

(下の例はpcount.acgiと保存データは同じ階層に設定してある)
私の場合counter.acgiは[WebSTAR 2.0J]と同じ階層におかなければ
ならないのでしょうか?(現在は[WebSTAR 2.0J]が置いてあるフォルダに
cgi-binというフォルダをつくりその中に入れてあります。)

<!--#exec cgi="pcount.acgi"-->
<!--#include virtual="day"-->
<!--#include virtual="old"-->
<は全角ではなく半角でよいのでしょうか?
<!--#exec cgi="cgi-bin/counter.acgi-->
<!--#exec cgi="counter.acgi-->としましたが、どちらも駄目でした。

execコマンドは外部CGIの結果をHTMLデータにストリームに挿入する。
include(インクルード)コマンドは現在のHTMLファイルに他のHTMLファイルを
挿入するコマンドである。

注1)拡張子は“.cgi”(同期)でなく“.acgi”(非同期)に設定のこと。
しました。
注2)SSIを使用の場合はAMNで定義した“.shtml”の拡張子にすること。

武藤くん さんからのコメント
( Monday, March 23, 1998 14:51:28 )

すんません、スクリプトがどのようにかかれているか
わからないので、わっかりませんです。

“<>”は半角です。

山根 さんからのコメント
( Monday, March 23, 1998 15:15:02 )

どうもお手数かけてすみません。
以下がMacPerlのスクリプトです。
よろしくお願いします。
#!perl
$datafile = "counter.dat";

open (DATA,"$datafile");
$number = <DATA>;
close (DATA);

$number = $number + 1;

open (DATA,">$datafile");
print DATA $number;
close (DATA);

print $number;

田中求之 さんからのコメント
( Monday, March 23, 1998 15:18:45 )

> <!--#exe cmd"cgi-bin/counter.cgi"-->番目です。

これは SSI (Server Side Include) の中から CGI を呼び出すタグですが、
MacHTTP では SSI は利用できません。 SSI と Perl そして CGI は全く別
のものですので、まずこの点の混乱を整理してください。

また、cgi-bin といった特別なフォルダーを作らなくても CGI は動きます。

お作りになった CGI がグラフィックでカウントを返すものであれば、

ページの中に <IMG SRC="counter.cgi"> というように、グラフィックとして
CGI を呼び出すタグを書いておけば表示されます。


なお、SSI を使いたいということであれば、サーバーを Quid Pro Quo にする
のがよいかと思います。フリーウェア版であっても、SSI が付属しています。
(アクセスカウンタも付属してますが…)

山根 さんからのコメント
( Monday, March 23, 1998 17:35:12 )

田中求之さま
アドバイスありがとうございました。
ご指示通りにしたところCGIはちゃんとうごいていました。
あとはCGIのプログラムをちゃんと書くことですね。
MacHTTPではSSIが利用できなかった。のですね。
WebMaster2.0Jでも同じなのでしょうね。
40過ぎてこんなこと始めると、脳みそが溶けそうです。
また、初歩的な質問をすることがあるかもしれませんがよろしくお願いします。

武藤くん さんからのコメント
( Monday, March 23, 1998 18:04:31 )

↑ 同感です(^^;
  40才のインターネットとかって本ないかしらね?

田中求之 さんからのコメント
( Tuesday, March 24, 1998 00:54:10 )

WebSTAR 2.0 では SSI が使えます。

CGI は、仕組みなり原理なりの最低限のことを押さえると、けっして難しいもの
ではないのですが、ただ、雑誌や書籍で紹介されているものは、そういう面倒な
話を抜きにして、「こうすればいい」「ああすればバッチリだ」といった書き方
になっているものが多いですから、いざというときに、かえって混乱することが
あるようです(機種や環境、開発言語が変わったら通用しない話になってること
が多いです)。

また、どうしても、プロバイダを始めとする UNIX を OS とするサーバで
の話が多いですから、MacOS の Web サーバーにはそのまま通用しない話も
多いのが事実です。たとえば、SSI は、Web サーバー自体の機能ではなく
特定の Web サーバーソフトが内蔵している付加機能なのですが、あたかも
Web サーバなら SSI は当然付いているかのような話があったりすると
混乱するわけです。

とりあえず無事に動いたとのことですから、それを足がかりに、じっくりと
攻めてください。

山根 さんからのコメント
( Wednesday, March 25, 1998 15:32:29 )

ご助言いただいたみなさま
ありがとうございます。
先週の金曜日にWebStarとパールの本を買ってきて始めました。
ご指摘の通り、面倒な話を抜きにして(私にとってはそこが一番知りたい所
です。)説明してあるので、書面通りにトライしてみてもうまくいきません
でした。
でも、この会議室で恥をしのんで投稿したところ、いろんな事が初めて理解
でき、いまではWebSTAR2.0でSSIを使用できる設定にすることができ、先日の
パールもちゃんと動くことが確認されました。
本当にみなさまのおかげです。ありがとうございました。

飯田 さんからのコメント
( Monday, May 18, 1998 02:06:03 )

初めまして、全くの初心者で何も理解してないのに質問するのは申し訳ないと思ったのですが
どうしても、自分で解決することが出来ないのでアドバイスをお願いします

山根氏と同じ質問なのですが
どうしても、カウンターを表示させることが出来ないのです
田中先生がおっしゃる通りに

 <img src="counter.cgi">

にしてみたのですが、表示されません

cgi自体動いてないのかと思い
直接、cgiにアクセスしてみたらちゃんとカウンターは表示されました

スクリプトは、このようになってます
------------------------------------------------------------------------------
#! perl
# count test

$cnt_file = "count.dat";
$disp_len = 6;

#現在のカウンタの取得
open (CFILE,"$cnt_file");
$cnt = <CFILE>;
close (CFILE);

#カウントアップ
$cnt++;

#指定桁数より大きければ0を補いPRINT
$cnt_len = length ("$cnt");
if ($cnt_len < $disp_len){
          $add_cnt = $dis_len - $cnt_len;
        for ($i = 0 ; $i <$add_cnt ; $i++ ){
                        print "<img src = \"0.gif\" border = 0 >";
        }
}

#カウントのPRINT
                print "Content-Type:image/gif\n\n";
for ( $i = 0 ; $j<$cnt_len ; $j ++ ){
                $now_img = substr ( $cnt,$j,1);
              print "<img src=\":images:$now_img.gif\">";
}



#カウントファイルに書き込み
open (CFILE,">$cnt_file");
print CFILE"$cnt";
close (CFILE);

-------------------------------------------------------------------------------
人のを見よう見まねで書いてみたので、滅茶苦茶になってるかもしれないです ^^;;

使用ソフト WebSTAR2.1 MacPerl 518r4

まったく、検討はずれかもしれないですけど、どうしても完成させたいので
よろしくお願いします (長文で申し訳ありませんでした)



usui , seiichi さんからのコメント
( Monday, May 18, 1998 09:17:19 )


見当違いかなって思いますが、
 <img src="counter.cgi">
のほうのソースを表示してみてください。

飯田 さんからのコメント
( Monday, May 18, 1998 13:57:01 )

usui , seiichiさん、ありがとうございます

test.htmlのソースです
-----------------------------------------------------------------

<html>
<tatle>カウンターtest</title>
<img src="../cgi-bin/counter.acig">回目です
</html>

-----------------------------------------------------------------
test.htmlは、cgi-binの上の階層に置いてます

同階層にも置き

<img src="counter.acgi">

として試してみてのですが、それでもだめでした(涙)

稲垣 さんからのコメント
( Monday, May 18, 1998 14:21:43 )

 外していたらすみませんが、cgiの方でもイメージを呼び出すタグを
入れているのではないでしょうか?

 多分、最終的には<imge src="<img src=":images:$now_img.gif">">

 の様に返していて、ブラウザが訳が分からなくなっていると思います。
ブラウザでアクセスした際の、ブラウザにあるHTMLソースを見て確認し
てみて下さい。

 多分、cgiの最後のイメージを指定するところで

print "images:$now_img.gif";

 とでもすれば、いいと思います。

 それでは、

hightide さんからのコメント
( Tuesday, May 19, 1998 01:01:41 )

<html>
<tatle>カウンターtest</title>
^^^^^^^
 ↑
タグのここがおかしいのでは?

#初投稿です。宜しく御願いします。

飯田 さんからのコメント
( Tuesday, May 19, 1998 14:20:54 )

稲垣氏、hightide氏ありがとうございます
返事が遅れて申し訳ありませんでした

>稲垣氏

  早速試してみましたが、ダメでした
  2桁以上になると、

  images:$now_gifimges:$now_gif

  に、なってしまうので1桁で表示するように変えてもダメでした
  (パスの区切りを:から、/に変えたりもしました)

>hightide氏

  おはずかしいです ^^ゞ
  こんな初歩的なミスにきずかなかったとは........ (TT
  御指摘の点は、修正しましたが
  変わりはありませんでした


#みなさん、私のような全く何もわからない、初心者につき合って下さってありがとうございます (感涙)
どうしても、自分だけでperlを組めるようになりたいので、皆さん呆れずにこれからもよろしくお願いいたします


hightide さんからのコメント
( Tuesday, May 19, 1998 21:08:25 )

Quid Pro Quo 2.0f1なら最初からカウントがついてる
ので、なんですけどSSIが使えるんでとりあえず
こういう感じが楽なのでは?

アクセスカウンター取り込むファイルは:
------------------------------------------------
<HTML>
<HEAD>
    <TITLE>COUNTER TEST</TITLE>
</HEAD>
<BODY>
アクセスカウンタは↓に表示される。<BR>
<!--#exec virtual="/cgi-bin/counter.acgi"-->
</BODY>
</HTML>
------------------------------------------------

で、これをcount.shtmlとでもしておきましょう。

カウンタ用のGIF画像はサーバーのルートディレクトリ
にしているフォルダにimagesという名前のフォルダ
をつくり、その中に0.gif、1.gif...9.gifの規則で
名前を付けて入れておきます。

CGIのスクリプトは:
------------------------------------------------
$cnt_file = "count.dat";
$disp_len = 6;

#現在のカウンタの取得
open (CFILE,"$cnt_file");
  $cnt = <CFILE>;
close (CFILE);

#カウントアップ
$cnt++;

#指定桁数より大きければ0を補いPRINT
$cnt_len = length ("$cnt");
if ($cnt_len < $disp_len){
    $add_cnt = $dis_len - $cnt_len;
    for ($i = 0 ; $i < $add_cnt ; $i++ ){
      print "<img src=\"/images/0.gif\" border=0>";
    }
}

#カウントのPRINT
# おまじない
# これがないとなぜかDocument contains no dataになるかも?
print "\n\n";
for ( $i = 0 ; $j < $cnt_len ; $j++ ){
  $now_img = substr ( $cnt, $j, 1 );
  print "<img src=\"/images/$now_img";
  print ".gif\" border=0>";
}

#カウントファイルに書き込み
open (CFILE,">$cnt_file");
  print CFILE"$cnt";
close (CFILE);

------------------------------------------------

これをcounter.acgiという名前でMacPerlでCGIスクリプト
として保存してQPQのcgi-binフォルダにいれて見てく
ださい。

関係ないですがカウント数の桁揃えって意図したとお
りに機能してます?


hightide さんからのコメント
( Tuesday, May 19, 1998 21:12:31 )

imgタグでうまいことCGIを呼び出す方法ってたしか
SHOEISHAのCプログラミング入門に書いてあったと
思うので、読んでみると良いかもしれないですよ。

hightide さんからのコメント
( Tuesday, May 19, 1998 21:14:28 )

すいません。

SHOEISHAのCプログラミング入門

は

SHOEISHAのCGIプログラミング入門

の打ち間違えです。

田中求之 さんからのコメント
( Wednesday, May 20, 1998 01:14:34 )

Perl は分かりませんのでコメントを控えていたのですが、飯田さんのソースで非常に
気になる点が一点あります。

出力の部分で、

print "Content-Type:image/gif\n\n";

というように、画像データを送るよ、とブラウザに指示を出しておきながら、実際には
"<IMG SRC=...>" という、HTML (画像へのリンク)を送りだしています。これでは
正しく表示されるわけないと思います。 content-Type ヘッダーは不要でしょう。

また、送りだすのは HTML なのですから、これをページに埋め込む場合には、

<IMG SRC="counter.cgi">

ではありません。この場合、ブラウザは当然のこととして、実際の画像データが送られてくる
ことを期待しますから、画像のリンク情報を送り返してもうまくいきません。

 SSI の Include あるいは exe コマンドを使う必要があるはずです。

飯田 さんからのコメント
( Wednesday, May 20, 1998 22:33:07 )

hightide氏、田中先生ありがとうございます

皆様のおかげで動かせうようになりました

hightide氏、田中先生の投稿を読み
早速、チャレンジしたのですが、前と変化はなし (TT
SSIのバージョンを、
2.1から、1.0.4(WebSTAR2.0Jのプラグイン)にして試してみたら
動きました ^^;;
まさか、バージョンを落として動くとは思いませんでした
原因をしりたいのですが、調べるだけの能力がないので
このままにしてしまいました ^^;;
(なにより、動かせたことが嬉しくて(笑))

今回、無知な私のために色々と御指導なさって下さった皆様
ありがとうございました

>hightide氏
  SHOEISHAのCGIプログラミング入門ですね
  ありがとうございます
  早速、書店にいってきます