• ベストアンサー

ランダム表示スクリプトを改造したい

ランダムに画像を表示するソースなのですが、もう一歩進んでhtmファイルに張り付いている画像だけをランダムに変化させたいのです。 つまり例えば画像の下に説明文など表示させている場合、その説明文はそのまま表示させて画像だけを表示させるたびに変化させたいのですが、以下ソースを利用して改造することなどは可能でしょうか? ご教授のほど、どうぞよろしくお願い致します。 #!/usr/local/bin/perl @htm = ( "001.htm", "002.htm", "003.htm", "004.htm", "005.htm", "006.htm", "007.htm", "008.htm", "009.htm" ); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $n = @htm; $n = $sec%$n; print "Location: http://www.hogohoge.jp/$htm[$n]\n\n";

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

  • ベストアンサー
  • hofuhofu
  • ベストアンサー率70% (336/476)
回答No.4

別の方法として、 <img src="hoge.cgi"> などとし、 hoge.cgiで目的の画像ファイルを読み込んで、「Content-type: image/jpeg」とともに出力する、ということでもできると思います。 サーバーの負荷は少し大きくなるでしょうけど。 http://park15.wakwak.com/~n_i/prog/cgi-img.html

tibox00
質問者

お礼

色々やってたら自分で出来ました! どうもありがとうございました!!

tibox00
質問者

補足

ご回答ありがとうございます! 上記URLのソースも試してみたいのですが、どのようにすれば良いでしょうか? 下にあった 「記述 <IMG SRC="http://~/cgi-bin/img.cgi">」は どこに記述して使用するのかよくわかりません。 お手数おかけしますが、順番をおって具体的にお教え頂けませんでしょうか?よろしくお願い致します。m(_)m

その他の回答 (3)

noname#199778
noname#199778
回答No.3

再び失礼します。 現状では何が直接の原因になっているのかちょっと推測しきれないところがあります。 SSIが問題なく動作しているとしたら、shtmlファイルの方の記述にミスはないでしょうか? もし記述にミスがないとしたら、サーバの設定やテストしているファイルの拡張子を見直す必要があるかもしれません。 とりあえず、ローカルサーバの設定でSSIを許容しているかどうかと、SSIとして認識する拡張子を設定しているかどうか(通常、SSIを実行させるファイルの拡張子として.shtmlを指定するのが一般的だと思います)、サーバの設定を見直してみて下さい。 また、SSIを実行させようとしているHTMLファイルの拡張子を、SSIを実行させるファイルとして設定してある拡張子に直してあるかどうかも確認してみて下さい。 そのファイルをSSIを実行するファイルとしてサーバが認識してくれない場合、SSIを呼び出す記述をしていても、サーバは反応してくれません。 (ローカルサーバを使って、テスト用のHTMLファイルをサーバから開き、そのページでブラウザからソースを表示させてみた時に、SSIを呼び出しているソースがコメント文としてそのまま表示されているとしたら、こちらが原因でしょう。 SSIを実行するファイルとしてサーバが認識していれば、そのSSIを呼び出している部分のコメント文は削除されているはずですので、もしブラウザからソースを表示させた時にそれが元のファイルのソースのままあった場合は、ファイルの拡張子を見直し、SSIが実行される拡張子に修正して下さい(あるいは、サーバの設定をその拡張子でSSIを実行させるように直してください)。) これらの点をもう既にクリアしていて、なお動かないという場合は、ちょっと原因がわかりかねます… その時は、ごめんなさい…

tibox00
質問者

お礼

ご丁寧なアドバイスありがとうございます。 お教え頂いた項目をチェックしてみたいと思います、どうもありがとうございました!

noname#199778
noname#199778
回答No.2

SSIでやる場合は、質問文のスクリプトを生かす形で改造するなら、とりあえずは以下のようにすればよいのではないかと思います。 #!/usr/local/bin/perl @imgs = ( "./001.jpg", "./002.jpg", "./003.jpg", "./004.jpg", "./005.jpg", "./006.jpg", "./007.jpg", "./008.jpg", "./009.jpg" ); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $n = @imgs; $n = $sec%$n; print "<img src=\"$imgs[$n]\">"; exit; これをplファイルかcgiファイルとして保存し、shtmlファイルの側から呼び出せば、複数の画像を自動で差し替えて表示させることができると思います。 一応、呼び出す側は「<!--#exec cmd="SSIの実行ファイルパス"-->」というソースになるはずです。 (SSIはこれまでまったく使った経験がないので、資料を見てテストしながら書いてみました。 不備があったらごめんなさい。) とりあえず、参考まで…

tibox00
質問者

補足

ご回答ありがとうございます!お手数おかけしてすいません。 ごめんなさい、ローカルで試してみたんですけど画像が表示されないみたいなんです。他のCGIで試したら呼び出せるのでSSIはちゃんと機能してるのですが・・。 パスも色々試してみたのですが、ローカルの同フォルダ内に画像を格納する場合画像パスは前の"./"は取って"001.jpg"でよろしいですよね・・? 何がいけないのでしょうか?

noname#199778
noname#199778
回答No.1

私自身Perlを扱う経験が浅いので、知識不足な点があるかもしれませんが… このスクリプトの場合、アクセスされた時間を基準にリダイレクト先のHTMLファイルを切り替えるスクリプトになると思うので、このスクリプトからはHTMLの内容に直接干渉していないために、目的のようにHTMLファイルの一部だけを変更させるということはできないのではないかと思います。 HTMLファイルの中身の一部のみを変更したいという場合は、CGIの側でHTMLを生成する必要があるのではないでしょうか。 HTMLファイルの表示内容の一部分を動的に変化させたいのであれば、HTML全体をCGIの側で動的に生成するか、SSIで画像を表示させる要素を挿入するか、あるいはクライアントサイドに依存してJavascriptで表示内容をランダムに変更させる方法をとる必要があるように思いますが、いかがでしょうか。 どうしてもこのスクリプトで対処するとしたら、同じ説明文・同じレイアウトで、表示している画像だけが違うHTMLファイルを複数用意して、それらのHTMLファイルにリダイレクトするような形にするという方法もありますが… 参考になれば… 見当違いでしたら、ごめんなさい。

tibox00
質問者

補足

分かりやすいご説明どうもありがとうございます! いくつか方法があるのですね、簡単なのはSSIでしょうか? SSI挿入でいちHTMLファイル内に複数画像をランダムに表示させることは可能でしょうか? もし可能ならそのスクリプト例をお教えください、よろしくお願い致します。

関連するQ&A