• ベストアンサー

ランダムに背景画像を変える方法。

掲示板などのCGIの背景をランダムに変えたいのですが、 どうすればいいのでしょうか? あるサイトでは、 @backimg =('img1.gif', 'img2.gif', 'img3.gif'); srand(time); $imgno=rand($#backimg+1); そして $body="<body background=\"$backimg[$imgno]\">"; となっていたのですが、これをCGIに埋め込んでもうまく動きません。 (img1.gifしか表示されません。) どうすれば背景画像をランダムに変化させることができるのでしょうか?

  • CGI
  • 回答数10
  • ありがとう数7

質問者が選んだベストアンサー

  • ベストアンサー
  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.10

>$body="<body background=\"$backimg[$imgno]\" bgcolor=\"$bc\" text=\"$tx\" link=\"$lk\" vlink=\"$vl\]" alink=\"$al\">"; よくご覧になってください。 vlink=\"$vl\]" となっていますよね。 \]" の部分です。 これではエラーが出るのは当り前ですよね。 うち間違いでしょうか? vlink=\"$vl\" としてください。

novaakira
質問者

お礼

よく見ると・・・・ゲゲ。 いったいいつの間に・・・>_< 確かにエラーがでるのは当たり前ですね。 一体私は何をやってんだか・・・ こんなもんを見落とすとは・・・・ まだまだ初心者だということを実感したかぎりです。ハイ。 お恥ずかしいかぎりです。 「]」をはずしてエラーもなくなりました。 長く付き合っていただき本当にありがとうございました。

その他の回答 (9)

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.9

>おそらく今までできなかった理由として、 >$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
novaakira
質問者

補足

回答ありがとうございます。 私が言いたかったことは、 $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 "" となってます。

  • callhiro
  • ベストアンサー率35% (54/152)
回答No.8

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

novaakira
質問者

補足

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

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.7

うまくいきましたか? >>&header; >>という記述より前に行わないといけませんよ? >これは何を指しているのでしょうか? >今私が持っているのはVersion 1.2ですが1.4と対して変わりはないはずですので、 &header;が実行されるよりも前に表示する絵を決めておかないといけませんという事です。 (例の4行を実行しておくということ) でないと、せっかくsub headerの中で$bodyを表示させようとしても、その中は空っぽですよね。 意味がわからなければ、やはりsub headerの中に srand(time); (略) を書かれた方が無難です。 それから、srand()に関しては#5、#6のO_Denwaさんのおっしゃるとおりです。 Perlのバージョンは解りますか?5.004以降だと、逆にsrandの記述が無くても 自動的に実行されるようですよ。

novaakira
質問者

補足

今までできなかったのですが、今日(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 をはずしたままではちょっとみっともないよーな・・・ これらを入れるにはどうすればいいのでしょうか? それともこれらは入れることができないのでしょうか? 入れないほうがいいというのであれば スタイルシートで定義すればいいだけですので。 ただ、できるかできないかだけ教えてください。

  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.6

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

  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.5

とりあえず。 @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); としてみてはどうでしょうか。

novaakira
質問者

お礼

回答ありがとうございます。以前はO_Denwaさんの言われたとおりにして みてもできなかったのですが、 今日(9/10)もう一度試したところ、できました。 おそらく今までできなかった理由として、 $bodyの中に text,link,alink,vlink,bgcolor を入れてたのでエラーが出るようです。 はずすとエラーはでません。ですがこれらを入れると またエラーが生じます。 無難にスタイルシートで定義しとけばいいのでしょうか? text,link,alink,vlink,bgcolor これらを入れることは可能ですか?それとも無理でしょうか?

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.4

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); の前に書いてしまっても問題ありませんが、 後々の変更を考えると、やはり初期設定に追加しておくのをおすすめします。

novaakira
質問者

お礼

回答ありがとうございます。今日(9/10)もう一度試したところ、 できました。 おそらく今までできなかった理由として、 $bodyの中に text,link,alink,vlink,bgcolor を入れてたのでエラーが出るようです。 はずすとエラーはでません。ですがこれらを入れると またエラーが生じます。 無難にスタイルシートで定義しとけばいいのでしょうか? text,link,alink,vlink,bgcolor これらを入れることは可能ですか?それとも無理でしょうか?

novaakira
質問者

補足

>&header; >という記述より前に行わないといけませんよ? これは何を指しているのでしょうか? 今私が持っているのはVersion 1.2ですが1.4と対して変わりはないはずですので、 「&header」は319行目(付近)にあって、 「sub header{」は1738行目(付近)にありますよね? どれを&headerの前に記述すればいいのですか? 4行をですか? 元々この4行は「初期設定」の中に入れてました。 ためしに1行目を残して後の3行をsub headerの中にいれてみましたが 画像は表示されません。 とりあえずversion 1.4で試してみます。

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.3

そういえば…基本的なこと聞きますが、 $bodyはどこかでprintしています…よね?

novaakira
質問者

補足

とりあえず、 sub header{     print "Content-type: text/html\n\n";     print <<"EOM" <html> <head> <title>$title</title> </head> $body EOM } としてますけど・・・・・ これってもしかしてやばいですか?

  • yuizuian
  • ベストアンサー率42% (103/245)
回答No.2

@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
novaakira
質問者

補足

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

  • marimo_cx
  • ベストアンサー率25% (873/3452)
回答No.1

@backimg =('img1.gif', 'img2.gif', 'img3.gif'); srand(time|$$); $imgno=int(rand(@backimg)); $body="<body background=\"$backimg[$imgno]\">"; とか?

novaakira
質問者

お礼

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

関連するQ&A

  • セルの背景画像ランダムチェンジがうまくいきません!

    過去の質問などを参考にセルの背景画像のランダムチェンジのソースを作りましたがうまく表示されません!何かアドバイスがあれば是非お願いします。 <head> <script language="javascript"> var BGimg=new Array(); BGimg[0]="image/01.gif"; BGimg[1]="image/02.gif"; var img_pcs=BGimg.length;//画像の数 var rdm_num=Math.floor(Math.random()*img_pcs);//乱数 function chg_BGimg(){ document.getElementById("changeIMG").style.backgroundImage="url('"+BGimg[rdm_num]+"')"; } </script> </head> <body onload="chg_BGimg();"> <table bgcolor="#333333"> <tr> <td id="changeIMG" style="background-image:url('image/first.gif');">このセルの背景が変わります</td> <td>blank</td> <tr> </table> </body> (実際のテーブルは列11×行9です。) 以上がソースです。どうも初期設定のfirst.gifが一瞬だけ表示されて、あとはテーブルの背景色になり、何も画像が表示されてず、「×」マーク(画像が見つからなかった場合にでるアイコン)もないのです。 このソースの改良点または、全く違う方法でも結構です、何かアドバイスがあれば是非お願いします。よろしくお願いします!

  • 背景ランダム

    JavaScriptを使って背景をランダムに変更したいので すが、その背景ごとにを左上固定や縦リピートなど を設定することは出来るのでしょうか? 宜しくお願い致します ちなみにCSSは基本だけですが理解しています <SCRIPT LANGUAGE="JavaScript"> <!-- function randomWall() { if (navigator.appVersion > '5' || (navigator.appName == 'Microsoft Internet Explorer' && navigator.appVersion > '4')) { var max = 6; wall = Math.floor(Math.random() * max) + 1; if (wall == 1) { document.body.background = '1.gif' } else if (wall == 2) { document.body.background = '2.gif} } } //--> </SCRIPT>

  • cssで背景画像をランダム表示する

    現在cssで背景画像をランダム表示するよう指示をしたいです。 テンプレート配布サイトからDLしたcssには以下のように指定されています。 ---- .menu{ float :left; background-image:url(img/menu_01.png); background-repeat:no-repeat; width :270px ---- このようなcss表記から画像をランダム表示に指定するには どのように加筆、修正をしたらよいのか教えて頂けますでしょうか。 似たような質問もたくさんされていたのでとても申し訳ないのですが、自力で色々試してみたものの、 どうしてもわからなかったので、お力を貸して頂ければ幸いです。 よろしくお願い致します。

    • 締切済み
    • CSS
  • スタイルシートで背景画像を指定

    今までbodyタグで背景を指定していたのですが、スクロールバーや余白の設定で スタイルシートを使うことになったので、背景画像もスタイルシートで指定することにしましたが、何度やっても表示されません。 このように書いてみました。 <style type="text/css"> <!-- BODY { background-image:url(img/28.gif); } BODY { 余白の設定} BODY {スクロールバーの設定 } --> </STYLE> htmlと同じフォルダの中にある、imgフォルダの28.gifという画像です。 画像のパスは間違っていません。アップロードもしてあります。 スタイルシートの解説をしているサイトさんを見ても、 何が間違っているのかわかりませんでした。 なぜ背景が表示されないかわかる方いらっしゃいますか? 余白やスクロールバーはきちんと表示されているのですが・・・

    • ベストアンサー
    • CSS
  • CSSで背景画像をランダムに表示させたいのですが

    CSSで背景画像をランダムに表示させたいのですが、簡単な対応方法などありますでしょうか? 背景のランダム表示としてbody部分をjavascriptで背景のランダム処理はたくさんあるのですが、今回はスタイルシートでbodyではなく、サイト内のいち部分のクラス要素の背景をランダムに表示させたいと思っています。 <div class="main"> ここにコンテンツがあって、このmainのクラス要素の背景をランダムに変えたいです。 </div> スタイルシートの方では現在は .main { float:left; background-image:url(/image/top_bg01.jpg); background-repeat:no-repeat; min-width:736px; height:auto; border-right:1px solid #000000; } としており、このtop_bg01.jpgの部分の画像を top_bg01.jpg top_bg02.jpg top_bg03.jpg top_bg04.jpg top_bg05.jpg とランダムに表示させたいのですが、対応方法が分からずに困っています。 http://www.designwalker.com/2006/12/random-css.html はためしてみましたが、PHPがうまく対応できずに断念してしまいました。 どなた様か宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • テーブルの背景画像をランダムに。

    こんばんは。 よく、背景画像がランダムで出てくるのってありますよね。 あれをテーブルの背景では出来ないでしょうか。 <TABLE background="画像のURL">の背景を ランダムにするやつです。 宜しくお願いします。

    • ベストアンサー
    • HTML
  • 背景画像の位置固定

    背景画像~画像固定と位置固定  過去ログにも似たような質問で、背景画像の固定がありました。 <BODY BACKGROUND="./img/back.gif" BGPROPERTIES=FIXED> ☆これと同時にブラウザの表示画面で、右下や左上といった 背景画像の位置まで固定させる方法とはあるのでしょうか? このとき、画像は並べて表示するのではなく、一つ だけ表示したいんです。サイズは400×400pix.です。  どうぞよろしくお願いします。

    • ベストアンサー
    • HTML
  • javascriptを使って画像のランダム表示とロールオーバーをセット

    javascriptを使って画像のランダム表示とロールオーバーをセットで行いたいのですが上手くいきません… javascript超初心者です…。画像をランダムに表示し、さらにそのランダムに表示された画像をそれぞれ違った画像にロールオーバーさせたいのですが上手くいきません。 一応以下のように書いて試しているのですが、ランダム表示はするのですが、ロールオーバーはエラーがでてしまい画像が切り替わりません。どのようにすれば上手く出来るか、知恵を貸してください。宜しくお願いします。 <html> <body> <SCRIPT language="JavaScript"> <!-- // ランダムに画像を表示する img = new Array(); onMouseover = new Array(); onMouseout = new Array(); // 画像のアドレス(数字はジャンプ先のアドレスと対応) img[0] = "top1.gif"; img[1] = "top2.gif"; img[2] = "top3.gif"; img[3] = "top4.gif"; img[4] = "top6.gif"; // マウスオーバー onMouseover[0] = "top1roll.gif"; onMouseover[1] = "top2roll.gif"; onMouseover[2] = "top3roll.gif"; onMouseover[3] = "top4roll.gif"; onMouseover[4] = "top6roll.gif"; // マウスアウト onMouseout[0] = "top1.gif"; onMouseout[1] = "top2.gif"; onMouseout[2] = "top3.gif"; onMouseout[3] = "top4.gif"; onMouseout[4] = "top6.gif"; n = Math.floor(Math.random()*5); document.write("<img src='"+img[n]+"' border='0' onMouseover='"+onMouseover[n]+"' onMouseout='"+onMouseout[n]+"'>"); //--> </SCRIPT> </body> </html> 補足 ●ランダム用の画像が1~5まで、ロールオーバー用の画像がa~eまであるとして、ランダム表示によって1が表示されたらロールオーバーで表示される画像はaのみ、マウスアウトしたら1に戻る、というようにしたいです。同じように2-b,3-c…というように対応させたいです。 ●ページ読み込み時のみランダム用画像をランダム表示させ、後は上記のような流れにしたいです。 長くなりましたが、どなたか回答お願いいたします。

  • 再訪時のランダムな背景について

    FLASH初心者です。 いま,FLASH MX 2004 でホームページを作っています。 再訪時に背景をランダムに表示したくてうまくできないので困っています。どなたかご教授ください。 具体的には,レイヤーの一番下段の「背景」のフレームに img = Math.floor(Math.random()*6+1); this.loadMovie(img+".jpg"); と書くと、ランダムに外部JPG画像が変わるのですが、 「背景」のレイヤーの上段にある文字やボタンが表示されません。 画像もゆっくりフェードインするようにアルファ値で変化させたいのですが,それも受け付けてくれません。 どのようにすればいいのでしょうか。

    • ベストアンサー
    • Flash
  • かぶらないランダム画像

    こんにちは。 現在ランダムに画像表示+画像毎に各リンク+マウスオーバーで画像切り替え を下記スクリプトで行っております。 function randomImage1() { img = new Array(); img[0] = "photo1.gif"; img[1] = "photo2.gif"; img[2] = "photo3.gif"; img[3] = "photo4.gif"; n = Math.floor(Math.random()*2); url = 'URL1 URL2'.split(' '); document.write('<a href="'+url[n]+'" target="_top"><img src="'+img[n]+'" border="0" onMouseOver="this.src=\''+img[n-0+2]+'\'" onMouseOut="this.src=\''+img[n]+'\'" onClick="location.href=\''+url[n]+'\'"></a>'); } ここで相談です。さらにこのソースを改造して 重複しないでランダムに画像表示させたいのですが、 どこをどう改造すれば良いかアドバイス宜しくお願い致します。

専門家に質問してみよう