dポイントプレゼントキャンペーン実施中!

掲示板などのCGIの背景をランダムに変えたいのですが、
どうすればいいのでしょうか?

あるサイトでは、
@backimg =('img1.gif', 'img2.gif', 'img3.gif');
srand(time);
$imgno=rand($#backimg+1);

そして
$body="<body background=\"$backimg[$imgno]\">";

となっていたのですが、これをCGIに埋め込んでもうまく動きません。
(img1.gifしか表示されません。)
どうすれば背景画像をランダムに変化させることができるのでしょうか?

A 回答 (10件)

>$body="<body background=\"$backimg[$imgno]\" bgcolor=\"$bc\"


text=\"$tx\" link=\"$lk\" vlink=\"$vl\]" alink=\"$al\">";

よくご覧になってください。
vlink=\"$vl\]"
となっていますよね。
\]"
の部分です。
これではエラーが出るのは当り前ですよね。
うち間違いでしょうか?
vlink=\"$vl\"
としてください。
    • good
    • 0
この回答へのお礼

よく見ると・・・・ゲゲ。
いったいいつの間に・・・>_<

確かにエラーがでるのは当たり前ですね。
一体私は何をやってんだか・・・
こんなもんを見落とすとは・・・・
まだまだ初心者だということを実感したかぎりです。ハイ。
お恥ずかしいかぎりです。

「]」をはずしてエラーもなくなりました。
長く付き合っていただき本当にありがとうございました。

お礼日時:2002/09/11 03:53

>おそらく今までできなかった理由として、


>$bodyの中に
>「text="00000" alink ・・・・」
>が入ってたのでエラーが出てました。

$body="<body background=\"$backimg[$imgno]\">";


$body="<body text="00000" background=\"$backimg[$imgno]\">";
のようになっていた…という事でしょうか?
""内で"を使いたいときは、\"としなければいけませんよ。
実際、
background=\"$backimg[$imgno]\"
となっていますよね。

この辺は本当に基礎の部分ですので、一度Perlをしっかり勉強されてみてはどうでしょうか?
初心者向けに丁寧に解説されているサイトをご紹介しますね。

参考URL:http://tohoho.wakusei.ne.jp/www.htm

この回答への補足

回答ありがとうございます。

私が言いたかったことは、
$body="<body background=\"$backimg[$imgno]\">";

ならOKなのですが、これを
$body="<body background=\"$backimg[$imgno]\" bgcolor=\"$bc\"
text=\"$tx\" link=\"$lk\" vlink=\"$vl\]" alink=\"$al\">";

とするとエラーになるといいたかったのです。
(joyful noteの初期設定で
<body background="$bg" bgcolor="$bc" text="$tx" link="$lk" vlink="$vl" alink="$al">
となっていますので。)

エラーは
Bareword found where operator expected at
C:\www\mitsu\public_html\isweb\joyful\joyful.cgi line 67, near ""
となってます。

補足日時:2002/09/11 02:17
    • good
    • 0

ローカルで試されてるとのことですが、


サーバにアップして試してみて下さい。
おそらくそれだけでランダムに表示されるようになる気がします。

この回答への補足

う~ん。サーバーにアップしてみましたがダメでした。
もう少し考えて見ます。

補足日時:2002/08/30 03:12
    • good
    • 0

うまくいきましたか?



>>&header;
>>という記述より前に行わないといけませんよ?
>これは何を指しているのでしょうか?
>今私が持っているのはVersion 1.2ですが1.4と対して変わりはないはずですので、

&header;が実行されるよりも前に表示する絵を決めておかないといけませんという事です。
(例の4行を実行しておくということ)
でないと、せっかくsub headerの中で$bodyを表示させようとしても、その中は空っぽですよね。

意味がわからなければ、やはりsub headerの中に
srand(time);
(略)
を書かれた方が無難です。

それから、srand()に関しては#5、#6のO_Denwaさんのおっしゃるとおりです。
Perlのバージョンは解りますか?5.004以降だと、逆にsrandの記述が無くても
自動的に実行されるようですよ。

この回答への補足

今までできなかったのですが、今日(9/10)スクリプトをいじってたら
以下の内容でできるようになりました。
# bodyタグ
@backimg =('img1.gif', 'img2.gif', 'img3.gif');
#srand(time);
$imgno=rand($#backimg+1);

$body="<body background=\"$backimg[$imgno]\">";

おそらく今までできなかった理由として、
$bodyの中に
「text="00000" alink ・・・・」
が入ってたのでエラーが出てました。
はずすとエラーはでません。ですがこれらを入れると
エラーがまた生じます。よって今ははずしていますが・・・・。

text,link,alink,vlink,bgcolor
をはずしたままではちょっとみっともないよーな・・・

これらを入れるにはどうすればいいのでしょうか?
それともこれらは入れることができないのでしょうか?
入れないほうがいいというのであれば
スタイルシートで定義すればいいだけですので。
ただ、できるかできないかだけ教えてください。

補足日時:2002/09/10 17:29
    • good
    • 0

#5モノです。



すんません。
眠気でなんの説明もせずに投稿しちゃったので、こちらで捕捉です。

#Srand(TIME);
として、「なんで、SRANDを飛ばすんじゃい」と思われるかもしれませんけど、
Perlの種類やバージョンによっては、Srandを入れる事により、
乱数の種が一定になるものがあります。
つまり、CGIを実行するたびに、同じ数値がでるのですね。
(私が借りてるところも、この現象がでます)
必ずしも、同じ現象なのかどうかはわかりませんけど、
最近のバージョンのPerlならば、乱数の種はSrandで設定しなくても、
CGI実行時に勝手に設定してくれるみたいですので、
とりあえず。Srandを飛ばしてどうか、試してみる価値はあるとおもいます。

違ってたらごめん。
    • good
    • 0

とりあえず。



@backimg =('img1.gif', 'img2.gif', 'img3.gif');
srand(time);
$imgno=rand($#backimg+1);



@backimg =('img1.gif', 'img2.gif', 'img3.gif');
#srand(time);
$imgno=rand($#backimg+1);

としてみてはどうでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。以前はO_Denwaさんの言われたとおりにして
みてもできなかったのですが、
今日(9/10)もう一度試したところ、できました。

おそらく今までできなかった理由として、
$bodyの中に
text,link,alink,vlink,bgcolor
を入れてたのでエラーが出るようです。
はずすとエラーはでません。ですがこれらを入れると
またエラーが生じます。

無難にスタイルシートで定義しとけばいいのでしょうか?
text,link,alink,vlink,bgcolor
これらを入れることは可能ですか?それとも無理でしょうか?

お礼日時:2002/09/10 17:52

joyful note落としてきました。


なるほど、改造の質問だからKENTさんのところでお聞きになれないんですね。

sub header{
    print "Content-type: text/html\n\n";
    print <<"EOM"
<html>
<head>
<title>$title</title>
</head>
$body
EOM
}
は問題ないのですが、肝心の
@backimg =('img1.gif', 'img2.gif', 'img3.gif');
srand(time);
$imgno=rand($#backimg+1);
$body="<body background=\"$backimg[$imgno]\">";
はどこに書かれました?
&header;
という記述より前に行わないといけませんよ?
これは色んなところで呼び出す物ですから、
@backimg =('img1.gif', 'img2.gif', 'img3.gif');
を初期設定の部分に解りやすく置いておいて、

sub header{
    srand(time);
    $imgno=rand($#backimg+1);
    $body="<body background=\"$backimg[$imgno]\">";
    print "Content-type: text/html\n\n";
    print <<"EOM"
<html>
<head>
<title>$title</title>
</head>
$body
EOM
}

としてみてはどうでしょう?
初期設定云々がわからなければ、
srand(time);
の前に書いてしまっても問題ありませんが、
後々の変更を考えると、やはり初期設定に追加しておくのをおすすめします。

この回答への補足

>&header;
>という記述より前に行わないといけませんよ?

これは何を指しているのでしょうか?
今私が持っているのはVersion 1.2ですが1.4と対して変わりはないはずですので、

「&header」は319行目(付近)にあって、
「sub header{」は1738行目(付近)にありますよね?

どれを&headerの前に記述すればいいのですか?
4行をですか?
元々この4行は「初期設定」の中に入れてました。
ためしに1行目を残して後の3行をsub headerの中にいれてみましたが
画像は表示されません。

とりあえずversion 1.4で試してみます。

補足日時:2002/08/29 00:37
    • good
    • 0
この回答へのお礼

回答ありがとうございます。今日(9/10)もう一度試したところ、
できました。

おそらく今までできなかった理由として、
$bodyの中に
text,link,alink,vlink,bgcolor
を入れてたのでエラーが出るようです。
はずすとエラーはでません。ですがこれらを入れると
またエラーが生じます。

無難にスタイルシートで定義しとけばいいのでしょうか?
text,link,alink,vlink,bgcolor
これらを入れることは可能ですか?それとも無理でしょうか?

お礼日時:2002/09/10 17:40

そういえば…基本的なこと聞きますが、


$bodyはどこかでprintしています…よね?

この回答への補足

とりあえず、
sub header{
    print "Content-type: text/html\n\n";
    print <<"EOM"
<html>
<head>
<title>$title</title>
</head>
$body
EOM
}

としてますけど・・・・・
これってもしかしてやばいですか?

補足日時:2002/08/28 23:58
    • good
    • 0

@backimg =('img1.gif', 'img2.gif', 'img3.gif');


srand(time);
$imgno=rand($#backimg+1);
$body="<body background=\"$backimg[$imgno]\">";

の部分に関しては問題ないと思います。
CGIはここだけで動いているのではないんですから、
これだけではなんともいえません。
それから「動かない」と言われても「どう動かないのか」は
novaakiraさんがおっしゃってくれないと
こちらではまったくわかりません。
InternalServerErrorが出るのですか?
正常に表示されるのに背景画像だけ表示されないのですか?
こういったご質問をされるのであれば、
最低
・どこまでやって
・どこで駄目になって
・どういう風にエラーが出ていて
・実行している環境と言語は何か
位は書いてください。

■画像だけがでない
・CGIと画像(img1.gif~img3.gif)は同じ階層にありますか?
・CGI用のディレクトリに画像が置けるサーバですか?
■Forbiddenになる
・パーミッションはあっていますか?
・CGIの実行できるディレクトリにアップロードしましたか?
■InternalServerErrorが出る
・CGIがPerlスクリプトでかかれている場合、Perlのパスはあっていますか?
・文法に間違いは無いですか?(セミコロン抜け等)
・FTPで転送する時にアスキー(テキスト)モードで転送しましたか?

文法の間違いなら、KENTさんの文法チェッカが便利だと思いますので
ご紹介しますね。

参考URL:http://www.kent-web.com/utility/index.html

この回答への補足

私にはまだ全部のスクリプトはかけませんので、
まずkentwebのjoyful note で試しているのですが・・・

質問に書いてあるとおり、これらの行を追加すると、
掲示板自体は表示されますが、img1.gifしかできてません。
まだサーバーにはアップしていません。ローカルでチェック中です。

補足日時:2002/08/29 00:03
    • good
    • 0

@backimg =('img1.gif', 'img2.gif', 'img3.gif');


srand(time|$$);
$imgno=int(rand(@backimg));


$body="<body background=\"$backimg[$imgno]\">";


とか?
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
言われたとおりにやってみたのですが
なぜかまだ表示されません。
しばらく考えてみます。

お礼日時:2002/08/29 00:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!