ラウンジ(兼FAQ掲示板)

クイズ、ミニオネアについて
過去ログ NO.1074230627
□ 薫 [2004年01月10日08時01分]
ミニオネアをDLさせて頂いて、
インフォシークにアップロード、パーミッションの変更までしましたが
新規投稿のボタンを押すと404のエラーになるのです。
CGIは初心者でこれ以上自分では解らず困っています。
どなたかお教え願えませんでしょうか?お願いします。
□ NXer [2004年01月11日19時56分]
はじめまして。NXerです。

ミニオネアは設置していません。クイズに興味がありサンプルを
試してみました。最初から、「残念!」の連発。発奮してダウンロード
という単純な動機の持ち主です。よろしく。
これは、すえぽんさんの電光!というcgiの姉妹版(兄弟版?親子版?)
でしたら、以下の変更で404エラーが解消するといいのですが。
---------------------------------------------------------------
■元
185 elsif ($buffer) { print "Content-type: text/plain\n\n"; }
■新
185 elsif ($buffer) { print "Content-type: \n\n"; }
----------------------------------------------------------------
行番号は当方のエディタで付けたもの。検索機能でtext/plainを
調べるとこの行だけが候補としてでますから、簡単ですよ。
□ 薫 [2004年01月12日05時11分]
NXerさん、初めまして!!
ご返信ありがとうございます。
NXerさんのご指示通り
elsif ($buffer) { print "Content-type: \n\n"; }にしてみましたが、
404Not Foundというエラーが出ました(;_;)
実は、電光!をもっと以前にDLさせて頂いており
elsif ($buffer) { print "Content-type: \n\n"; }にしました所表示が可能になりました。しかし、新規投稿で投稿ボタンをクリックすると404Not Foundとでますが更新をクリックすれば投稿は出来てますし管理人専用にしてますからさほど気にしてませんでした。
と、なるとやはり私の初歩的ミスでしょうね。
相対パスの設定が苦手なんです(^^;

ファイル構成は、
index.html
└cgi-bin┐
........minionaire 
..........├data(777)
..........│ └quest.cgi(666)
..........├jcode.pl(644)
..........├memo.gif
..........├minionaire.cgi(755)
..........└test.html(644)

呼び出しURLは
<script src="cgi-bin/minionaire/minionaire.cgi?js"></script>

私が設定変更した部分↓
※マスターパスワードは
#---------------------- 初期設定ここから ----------------------#

# マスターパスワードの設定(必ず設定して下さい→半角英数)
$master = "test";←は更に変更しなおしました。

# このスクリプトファイルをフルパスで記述
$script = "http://kokiryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi";

# クイズ$ミニオネア!を表示させるページ(フルパスでも相対パスでも構わない)
# 単体で使用する場合はこのファイルの名前を記述(?htmlまで)
$opener = "http://kokuryuu-hiei.hp.infoseek.co.jp/link3.html";

# ファイルロック(書込が頻繁にあり、同時投稿などの可能性がある場合は 1 にする)
$lock_mode = 0; # ファイルロックOFF = 0 ファイルロックON = 1

# 入力形式(不都合がある場合はGETに変えてみる)
$method = "POST";

#------------------ 初期設定ここまで ------------------#
#------------------ 詳細設定ここから ------------------#

# スクリプトファイルを設置するディレクトリ
# 埋め込むファイルから見たパスで記述
$base_dir = "cgi-bin/minionaire/";

# ログファイルを設置するディレクトリ
$tmp = "./data/";

# ログファイルの名前
$file = "quest.cgi";

# アイコン用画像
$img = "http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/memo.gif";
#------------------ 詳細設定ここまで ------------------#


今回変更した部分
sub js_output {

if ($buffer eq "html") {
print "Content-type: text/html\n\n";
print "<html>\n<head>\n";
print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=x-sjis\">\n";
print "</head>\n$html_body\n<script>\n";
}
elsif ($buffer) { print "Content-type: \n\n"; }
else { print "<script>\n"; $tmp = "$base_dir$tmp"; $img = "$base_dir$img"; }

open(READ,"$tmp$file") || &error_js("[ $file ]が開けませんでした。");
@lines = <READ>;
close(READ);
以下省略
____________________________________________________________________

すみません。お手数ですが間違ってないか見て頂けないでしょうか?
宜しくお願いします<(_ _*)>

□ 薫 [2004年01月12日07時34分]
申し訳ないです。
#---------------------- 初期設定ここから ----------------------#

# マスターパスワードの設定(必ず設定して下さい→半角英数)
$master = "test";←は更に変更しなおしました。

# このスクリプトファイルをフルパスで記述
$script = "http://kokiryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi";
↑のURL一文字書き間違えてました。すいません。

間違った箇所を変更してアップロードしました。
でも新規投稿は出来ず
http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?htmlで呼び出せば出来きました。なぜ?
↑これは単体で使用する場合でページに埋め込んで新規投稿するにはどこが間違ってるんでしょう!?もー、さっぱりです(;;)

□ 薫 [2004年01月13日06時00分]
> 大きなcgiスクリプトのために、レスポンスが長くなり、失礼しました。
↑いえ、こちらこそ感謝しております。お手間おかけしてすみません。
ありがとうございます。


返信して頂いたとおりに変更してみました。
ミニオネアはlink3.htmlに表示したいのでlink3.htmlを開いて確認して、
それからhttp://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?htmlを呼び出してみました。

すると、link3.htmlでは新規投稿のアイコンとリンクは、されてませんでした。が、http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?htmlの場合は新規投稿のアイコンとリンクが出来てました。エラーもありませんでした。
問題も登録してみました。問題は登録、表示されてます。
やはりlink3.htmlではmemo.gifの表示、新規投稿は出来ませんでした。

フォルダ構成
hp
├index.html
├link3.html←このファイルにミニオネアを設置したいです。
└cgi-bin
・・└minionaire
・・・・・├data
・・・・・│・└quest.cgi
・・・・・├minionaire.cgi
・・・・・├jcode.pl
・・・・・├memo.gif
・・・・・└test.html
フォルダ構成を書いた事があまりない為書き方が合ってるか怪しいですが・・・(^^;
link3.htmlとcgi-binは同じフォルダにあります。
cgi-binフォルダにminionaireのフォルダ。
minionaireのフォルダにdata、minionaire.cgi、jcode.pl、memo.gif、test.html。
dataフォルダにquest.cgiです。
--------------------------------------------------------------------
# クイズ$ミニオネア!を表示させるページ(フルパスでも相対パスでも構わない)
# 単体で使用する場合はこのファイルの名前を記述(?htmlまで)
$opener = "http://kokuryuu-hiei.hp.infoseek.co.jp/link3.html";
--------------------------------------------------------------------

link3.htmlには
<script src="http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?js"></script>
と記述しました。
またお手間かけますが宜しくお願いしますm(_ _)m

今、CGIなどに大変興味を持っております。
でもいろいろ本がありすぎてどの本を参考にしたら良いか迷ってたところです。早速『JavaScript+CGIハイブリッドスクリプト』を買って勉強してみますp(^-^)q

□ 薫 [2004年01月13日10時09分]
当方は電光!の経験しかないことのため
↑と言ってらしゃるのにこんな質問ですいません。

http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?htmlで呼び出すと新規投稿出来るので問題を作ってたのですが問題の登録数を増やすと出題数も増える。
出題数5問のままで登録数を増やすことって出来るのでしょうか?

□ NXer [2004年01月13日22時49分]
>エラーもありませんでした。
お試しの上、結果をお知らせいただき、ありがとうございます。
☆☆
当方の不注意で前のメールに誤記がありましたので、削除の上
訂正して、ここに再録させていただきます。失礼しました。
なお、その後のご質問は、最下段です。

-------------NXer [2004年01月12日19時58分] 投稿文一部訂正再録
>なぜ?>もー、さっぱりです(;;)
もし、このようなプログラミングに興味をお持ちでしたら、すえぽんさん
の新刊書『Webプログラミングの荒技!JavaScript+CGIハイブリッドスクリプト』
(編集/田中由紀子、ディー・アート、225頁、レファレンス、索引付き
2004年1月31日発行、定価2,300円+税)
(発行日前ですが入手可)などの参考書をお薦めします。
なお著者名は、「すえぽん」ではなく、「末永政昭」(すえながまさあき)
さんです。
初期設定の比較です。NXerが作成しました。それに基づいた提案です。
説明は時間のある時お読みください。
■すえぽんさんの設定▲薫さんの設定
# スクリプトファイルを設置するディレクトリ
# 埋め込むファイルから見たパスで記述
■$base_dir = "minionaire/"; 
▲$base_dir = "cgi-bin/minionaire/";
# ログファイルを設置するディレクトリ
■$tmp = "data/";
▲$tmp = "./data/";
# アイコン用画像
■$img = "./memo.gif";
▲$img = "http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/memo.gif";
提案1 $tmp = "data/";とすえぽんさんの設定にもどしてはいかがですか。
もしこれで上手く行けば次は画像も、もともにもどします。
説明1)データ用一時保存ディレクトリについて
$tmp = "./data/";
前回修正行の次の行に$tmpがでています。ということは、前回のエラーが185行目
であったこと、修正してこの186行でエラー発生と特定できるでしょうか。今度の
不具合は、このtmpディレクトリのパスに問題があるように思われます。
186 else { print "<script>\n"; $tmp = "$base_dir$tmp"; $img = "$base_dir$img"; }
では、この行は具体的にどのように実行されているのでしょうか。
--------------------------
$tmp = "$base_dir$tmp" $img = "$base_dir$img"
------------------------
このように基本ディレクトリの後に一時保存ディレクトリと画像ディレクトリが
連続しています。$tmp = "$base_dir$tmp"を分解すると
$base_dir = "cgi-bin/minionaire/";
$tmp = "./data/";
これらを直線的に並べると、薫さんの初期設定でデータファイルに至るパスです。
---------------------------
cgi-bin/minionaire/./data/
-----------------------------
つまり、./ (ドットスラシュ)がディレクトリ構成図から判断すると余分ですね。
しかし、単体起動で書き込むと、エラーになっているが、データは残っています。
理由は、おそらく、次のようになります。
$tmp = "./data/"という変数が、サブルーチンによっては、ベースディレクトリ配下で単独で使われているとき、相対パスですから、現在いるディレクトリ内のデータディレクトリのquest.cgiファイルに書き込んでいます。
(このことは、電光!でもそうなのでしょうか。)
データは読み出しと書き込みで利用します。
422 523 open(READ,"$tmp$file")   #相対パスでデータが読み込めます
440 542 open(WRITE,"> $tmp$lock")  #相対パスでデータ書き込み可
これは、偶然という要素に助けられています。(もし同じような設定なら、
電光!では、管理者モードーのため、その都度、リロードすることで救われています。)2)画像について
それから画像ですが、同じように書くと
cgi-bin/minionaire/http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/memo.gif
となるはずです。もし、perlがこのように実行されると、エラーになります。
では、単体で表示する時、またタイトル頁に表示だけする時、画像が問題なく出
ているのでしょうか。
334 BUF+='<td><a href="" onClick="win(); return false;"><img src="http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/memo.gif" width=15 height=15 border=0 title="新規投稿/記事の削除はこちらから"></a></td>';
これは、<img src="$img" の代入値が初期設定でhttp://で始る完全なURL
で書かれているために問題なく表示できたものです。
提案2 発想を変えて、薫さんの設定を優先すると
186 else { print "<script>\n"; $tmp = "$base_dir$tmp"; $img = "$base_dir$img"; }
$tmp = "$base_dir$tmp"; → $tmp = "$tmp";
$img = "$base_dir$img"; → $img = "$img";
でいいのかもしれません。
当方は電光!の経験しかないことのために変更点が的外れかもしれません。
せめて、解決を探るヒントがこの中にありますでしょうか。
大きなcgiスクリプトのために、レスポンスが長くなり、失礼しました。
以上改訂版--------------------------------------------------

[2004年01月13日06時00分]の不具合
>やはりlink3.htmlではmemo.gifの表示、新規投稿は出来ませんでした。
--------------------------------------------------------------------
# クイズ$ミニオネア!を表示させるページ(フルパスでも相対パスでも構わない)
# 単体で使用する場合はこのファイルの名前を記述(?htmlまで)
$opener = "http://kokuryuu-hiei.hp.infoseek.co.jp/link3.html";
--------------------------------------------------------------------
これは正しいとします。そうすると、このファイル内にエラーの原因があるはずです。
---------------------------------------引用
link3.htmlには
<script src="
http://kokuryuu-hiei.hp.infoseek.co.jp/cgi-bin/minionaire/minionaire.cgi?js"></script>と記述しました。
----------------------------------------

readme文書の二つのscript srcを相対パスで試してみてください。
というのは、先ほど当方のブラウザで気が付いたのですが、↓のように
アドレスがなっていたからです。
http://kokuryuu-hiei.hp.infoseek.co.jp/link3.html?09:02:56

◇ 新規投稿後の記事の更新は確実になるが、Netscape4.x 未対応でも構わない場合。
<script>document.write("<script src='./minionaire/minionaire.cgi?",new Date(),"'>")</script></script>

◇ 新規投稿後の記事の更新はユーザの設定によるが、Netscape4.x にも対応させる場合
<script src="./minionaire/minionaire.cgi?js"></script>

ただし、/cgi-bin/をドットの後に追加する必要があると思います。

どれも上手くいかないときは
今の単体で「ページの1部品としてではなく独立した単体としての使用もできます。」
ということから、フレーム(枠非表示など細工を施し)にしてミニオネアを表示す
るなどすれば、部品ポクなるかも。

1)出題数5問のままで
2)登録数を増やすことって出来るのでしょうか?
出題数と登録数の意味がよく分かりません。よろしければ、例で説明してください。
当方にはスクリプトはありますから。
□ 薫 [2004年01月14日12時39分]
有難うございました。
フレームにしました。もちろんエラーなしです(^^)

もうひとつの質問ですが、
----------------------------------------------------------
# 問題の最大記録数(これが一回毎の出題数にもなります)
$max_log = 5;
----------------------------------------------------------
と書いてありました。
現在の記録数が5なのでミニオネアをスタートすると5問出題される!と言う事ですよね!?

となれば、問題の最大記録数を
例えば$max_log = 100;に変更して100問記録するとミニオネアを1回するのに100問出題されてしまいます。

記録数は出来るだけ増やしたいけど出題は5問に抑えたいのですが・・。

よ、宜しくお願いします。。
□ NXer [2004年01月14日23時05分]
>CGIは初心者で
といわれますから、下段の提案を実行するには次の幾つか条件
付きです。(直接データ編集の際は、常に現在のデータを壊さ
ないように、まず、転送して適当なファイル名に直し保存してください。)

その1、データファイルの転送に習熟している
   (FTPソフトでデータファイルをテキストモードで転送する)
その2、データファイルの管理を組織的にする時間的な余裕がある
   (問題別、ジャンル別など、ファイル名を整理する
    しかし、ミニオネアに転送する時は常にquest.cgiという
    名前に書き換える)
その3、問題の作成は直接データファイルを作成して転送する。
    利用者がほぼ24時間いつでも利用できる
その4、問題作成のために日本語コードがシフトJISである
   改行コードが、サーバーのそれと同じコードで保存できる
   エディタ(例、秀丸など)を使う

ことばにすると大げさですが、今あるquest.cgiファイルを
サーバーから、ご自身のコンピュータにテキストモードで
転送して、ご使用のエディタにて内容を見てください。
それを、1文字でも、解答番号一つでも修正して、その後
転送、結果をミニオネアで確認してください。うまく変更できたら、そして
下記のような私の考えに興味をお持ちでしたら、実行あるのみです。

1)転送する時の対象のデータファイル名(常にこのファイル名)
------------------------------
# ログファイルの名前
$file = "quest.cgi";
-------------------------------

2)データ形式
-----------------------------------
199 & 494 $number,$quest,$an1,$an2,$an3,$t_an,$host
-----------------------------------
今のを転送すれば、中味を見ることが出来ます。
以下の例はこの形式を優先してください。

3)現在の最大記録数=出題数=単位数
-------------------------
# 問題の最大記録数(これが一回毎の出題数にもなります)
$max_log = 5;
------------------------
> 記録数は出来るだけ増やしたいけど出題は5問に抑えたいのですが・・。
この数を一ファイル当りの「単位数」とします。
利用者にいつもたとえば5問という定型あれば
リピータを増やせるような気がします。

4)登録数
上で定めた単位数のデータファイルを、ご自身のコンピュータ
に、必要なだけ作成します。(ミニオネアで作成してデータ
転送でも可)
単位数=記録数=問題数 5
登録数 任意の数 (単位数の問題をいくつでも) 
(参考までに今のquest.cgiのプロパテイを
みて何バイトか確認してください。サーバー上では問題ない大きさ
と思います。)

5)転送
ホームページで予告をするなどして、計画的に
登録したデータから一度に一つだけ、転送します。

6)もし私が作成したら

199 & 494 $number,$quest,$an1,$an2,$an3,$t_an,$hostの形式で

1,阪神の監督は誰か,星野,岡田,吉田,2,xxx.net.jp
2,中日の監督は誰か,原,松井,落合,3,zzz.net.jp
(後は省略,これはあくまでも仮のもの。転送データ形式が優先)
ファイル名、sport_baseball_managers
転送する時は、これをquest.cgiというファイルにコピーしてから
転送する、
或いは、sport_basebal_managersのまま転送してサーバー上
でファイル名をquest.cgiに変更

これで手元にはオリジナルが残り、いつでも編集できます。

7)ジャンル別などはファイル名で管理する

例 
sport_baseball_players
anime_hikarunogo_sindou
anime_hikarunogo_sai
anime_hikarunogo_kouyu
oekaki_my works_2003
oekaki_my works_2004
など
ただし、ミニオネアでは、このうちの一つだけを転送、表示。

8)利用者への案内
利用者からのリクエストに応えるなど、ジャンルを表示し
リクエストに応じて問題を転送する、など
本当の意味でインタラクティブ(相互交流)なcgiにする、、、

こんなことが実現できたら、夢のようです。お笑いください。
失礼しました。以上、NXerでした。



□ 薫 [2004年01月16日14時23分]
有難うございました。
問題を作っておいて入れ替えればいいんですね。
それなら出題数は変わらない(^^)

本当に有難うございました。

追記
今、本を注文中です。届くのが楽しみですv


suepon.com | CGI作成/CGI制作 | JavaScript | ドメイン検索 | バナー自動作成 | Google ダンスツール | 松浦亜弥 | H.P.memo | パソコン | ネイル

Copyright (C) 2002 - 2008 suepon , All rights reserved. Powered by CGI Script Market.