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

WEB TEN2.0のCGIで困ってます。

発言者:藤川
( Date Monday, May 10, 1999 15:52:22 )


CGIでの動的なページを作ろうと思い、市販の書籍にあった
下記のようなサンプルを試しに動かそうとしたのですが、思うように動作しません。

内容:アクセスごとに違う画像を表示する。

●ファイル配置

www.mydomain.co.jp/
├─index.shtml
├─images/
   ├─image1.gif
   ├─image2.gif
   ├─image3.gif
   ├─image4.gif
   └─image5.gif

cgi-bin/
   ├─change.pl
   └─change.dat
________________________________

●index.shtmlの内容

<html>
<head>
<title>change</title>
</head>

<body bgcolor="#0000cd">

<center>
<font size=6 color=#ffffff">アクセスごとに違う画像を貼り付けるサンプル<P>
<!--#exec cmd="./cgi-bin/change.pl"-->
</font>
</center>

</body>
</html>
________________________________

●change.plの内容

#!/usr/local/bin/perl

# 作業ファイルを設定
$file="./change.dat";

# 貼り付ける画像

  $word_0= '<img src="./images/image1.gif">';
  $word_1= '<img src="./images/image2.gif">';
  $word_2= '<img src="./images/image3.gif">';
  $word_3= '<img src="./images/image4.gif">';
  $word_4= '<img src="./images/image5.gif">';

  open(DATA,"$file") || die "error";
  while(<DATA>){ $count=$_; }
  close(DATA);

# (5種類)

  print $count==0 ? $word_0:
        $count==1 ? $word_1:
        $count==2 ? $word_2:
        $count==3 ? $word_3:
        $count==4 ? $word_4:"error","<p>\n";

# (5種類)

  if ($count eq '') { $count=0; }
  $count++; if ($count == 5) { $count=0; }

  open(DATA,">$file") || die "error";
  print DATA "$count";
  close(DATA);

  exit;

________________________________


以上でwww.mydomain.co.jp/index.shtmlへアクセスすると

画像が出るべきとこころに
[an error occurred while processing this directive] 
と表示が出ます。

巷の参考書などを読むとcgi-bin内のファイルのパーミッション(755とか666)
が必要とあったので、FTP(Fetch)でログインし、パーミッション
変更をおこなおうとしたのですが、サーバから拒否されてしまいます。
それともWEB TENでのCGIの実行許可には、他の方法があるのでしょうか?
また、その他ファイルの設置場所や、設定、記述ミスなどがあるのでしょうか?

WEB TENユーザの方でおわかりの方がいらっしゃいましたら
ご教示願えれば幸いです。







パルサー さんからのコメント
( Monday, May 10, 1999 19:18:19 )

> 巷の参考書などを読むとcgi-bin内のファイルのパーミッション(755とか666)
> が必要とあったので、FTP(Fetch)でログインし、パーミッション
> 変更をおこなおうとしたのですが、サーバから拒否されてしまいます。
> それともWEB TENでのCGIの実行許可には、他の方法があるのでしょうか?
> また、その他ファイルの設置場所や、設定、記述ミスなどがあるのでしょうか?

WebTenフォルダーの中に tenon/templates/cgi-bin という
フォルダがあるはずです。
このcgi-binフォルダは空のようですが、不可視のファイルが入っています。
このcgi-binフォルダーをコピーして使えば大丈夫なはずです。

まさ さんからのコメント
( Tuesday, May 11, 1999 11:08:30 )

確認なんですけど、ssiを使っていますが、tenon/apache/conf/httpd.conf 
の設定はssiを使える設定にはなっていますよね?

あと、cgi-bin ディレクトリは、アクションハンドラを無視の所で、cgi-script
になっていますか?

これは僕の意見なのですが、cgi-bin の中に、scripts というフォルダを作り、
その中は書き込み出来るように僕は解釈しているのですが、その場合、scripts
の中のファイルは、全てtenon/utilities/Unix <-> Text でunixテキストに
変えています。(ファイルアイコンに、○がいっぱいあるやつ)

もし、設定変えてなかったら変えた後は再起動してください。
初歩的な事しか言えなくて申し訳ありません。

藤川 さんからのコメント
( Tuesday, May 11, 1999 13:25:10 )

パルサーさん、まささんレスありがとうございます。

>確認なんですけど、ssiを使っていますが、tenon/apache/conf/httpd.conf 
>の設定はssiを使える設定にはなっていますよね?

なっていると思います。動作確認のためにindex.shtmlファイルの中に
<!--#config timefmt="%B.%d-%Y"--><!--#echo var="DATE_LOCAL"-->
という日付表示のコマンドを書き込んでみましたら
今日の日付(May.11-1999)を表示できました。


>これは僕の意見なのですが、cgi-bin の中に、scripts というフォルダを作り、
>その中は書き込み出来るように僕は解釈しているのですが、その場合、scripts
>の中のファイルは、全てtenon/utilities/Unix <-> Text でunixテキストに
>変えています。(ファイルアイコンに、○がいっぱいあるやつ)

scripts フォルダを作ってそこにchange.plとchange.datの
ファイルを置いてみましたが、だめでした。ちなみにファイルタイプ
(ファイルアイコンに、○がいっぱいあるやつ)の変換はしました。

>あと、cgi-bin ディレクトリは、アクションハンドラを無視の所で、cgi-script
>になっていますか?

このへんがわかりにくい点なのですが、cgi-bin ディレクトリ
はどれを使うべきなのでしょう?
WEB TENフォルダ直下にcgi-binというフォルダがあります。
この中にはデフォルトで
scriptsフォルダと
cache-mgr
dns-mgr
flush
printenv
printenv.pl
printenv.sh
responder.acgi
といったサンプル(?)ファイルが入っています。
私はこのcgi-binの中にchange.plとchange.datのファイルを置いたのですが、この場所ではNGなのでしょうか?
それとも自分のsiteフォルダ(www.mydomain.co.jp)の中にcgi-binフォルダを作って
置かなければならないのでしょうか?

まさ さんからのコメント
( Tuesday, May 11, 1999 15:23:40 )

>なっていると思います。動作確認のためにindex.shtmlファイルの中に
><!--#config timefmt="%B.%d-%Y"--><!--#echo var="DATE_LOCAL"-->
>という日付表示のコマンドを書き込んでみましたら
>今日の日付(May.11-1999)を表示できました。
デフォルトでは、この辺りのコマンドは使えるはずです。
しかし、このままですと、#exec や #include は使えないはずです。
tenon/apache/conf/httpd.conf をテキストエディタで開いてずっと下の方に、
<VirtualHost  xxx.xxx.xxx.xxx:81>
ServerName  www.mydomain.co.jp
Options  Indexes FollowSymLinks IncludesNoExec
ServerAlias   127.0.0.1 localhost localhost.mydomain.co.jp
ServerPath  /www.mydomain.co.jp
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/WebSites/www.mydomain.co.jp/cgi-bin/
LogFormat  "%W %d %w %h %>U %b"
TransferLog  logs/mydomain.log
</VirtualHost>
とか書いてある部分があるので、ここの Options の IncludesNoExec を NoExecを削って
Includes にしてみてください。

>このへんがわかりにくい点なのですが、cgi-bin ディレクトリ
>はどれを使うべきなのでしょう?
ごめんなさい、うちの環境ではバーチャルドメイン等を運用しているので、参考に
ならないかもしれませんが、うちでは自ドメインの中に cgi-bin ディレクトリを
作って置いています。
藤川さんの、現状で、http://www.mydomain.co.jp/cgi-bin/responder.acgi 等が
動けばそちらに入れていていいと思います。
この辺り、はっきりしなくて申し訳ないです。

藤川 さんからのコメント
( Tuesday, May 11, 1999 18:41:08 )

まささん、こんばんは。
>Options の IncludesNoExec を NoExecを削ってIncludes にしてみてください。
なるほど、ではさっそく・・・

!!!!おぉ、動きました〜〜〜〜〜〜
感動ですぅ \^〇^/

まささん、感謝します!!
ありがとうございました。


まさ さんからのコメント
( Tuesday, May 11, 1999 19:36:48 )

おめでとうございます。
お役にたててよかったです。

WEBTEN の情報ってなかなかないし、私もまだまだ初歩的で質問とかあるので、
藤川さんも分かる事あれば教えて下さい。

藤川 さんからのコメント
( Wednesday, May 12, 1999 08:52:34 )

>WEBTEN の情報ってなかなかないし

そうなんですよね。苦労します。

>藤川さんも分かる事あれば教えて下さい。

喜んで(^^)
これからもこの場所を(勝手ですけど)お借りして、私なりに
WEB TEN関連の情報(相談のほうが多いかもしれませんが)
を書き込みたいと思います。
よろしくお願いします。