• 締切済み

ローテーションで表示させるCGI

バナー管理のCGIはたくさんあるのですが、大体が表示方法がアットランダムです。定められたローテーションで表示させるCGIをご存じないでしょうか? つまり、N個の画像ファイルをサーバーのあるデイレクトリに保存します。方やhtmlファイルには、(N-X)個の画像の位置を指定ておいて、ローテーションで順番に表示されるCGIです。 ご存じの方、ご教示お願いいたします。

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

他のCGI設置経験があれば類推可能かとも思ったのですけど。無理でしたか? まずは、「ここから」の次の行から、「ここまで」の手前の行までを コピーして、エディターまたはメモ帳の新規ファイルに貼り付けて下さい。 そして、ファイル名を、「changer.cgi」などとします。 windowsの古いversionのメモ帳だと拡張子に「.txt」が付加されることがあるので、そのときはエクスプローラーでファイル名を変更して下さい。 それから、お使いのサーバーでの「perl呼び出しパス」に合わせて、1行目を書き換えます。 次に、画像ファイルのリストのところを、サーバーに設置した時のcgiから表示したい画像までの相対パスで入力します。 ファイル名はシングルクォーテーション「''」で括ることと、複数のデータは半角カンマ「,」で繋げるところの入力忘れに注意して下さい。 また、配列の引数は0開始で、カウンターは1から開始するので、リストの2番目の画像から表示開始になります。ローテーションして1番目に戻ります。 ftpソフトなどで、cgi設置用のディレクトリーに上記「changer.cgi」と画像ファイルとをアップロードします。 パーミッション設定は、 changer.cgi は705 画像ファイル は644 あと、cgiの実行権限がownerではないサーバーの場合は、カウンター用ファイルも先に作っておくことをお薦めします。 エディターで「0」とだけ書いて「numfile.log」というファイル名で保存し、cgiを置いたディレクトリーにアップロードします。 カウンターファイルのパーミッションは606とします。 実行チェックとして、cgiのURIをブラウザのURI欄に入力し、 表示されたなら、リロードして画像が切り替わることも確認。 このURIを表示したいページのimgタグのsrcに指定すれば完了です。

takanekido
質問者

お礼

丁寧に教えていただいたにもかかわらず、連絡が遅れて申し訳ありません。当方あまりCGIの知識がないため、少し時間がかかると思いますが、教えていただいたものを稼働させるべくガンバってみます。 本当にどうもありがとうございました。

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.1

簡易カウンタースクリプトをすこし書き換えればいけそうなので、作ってみました。 ##### ここから:環境に合わせて適宜書き換え下さい #!/usr/local/bin/perl ### 画像ファイルのリスト @files =('./num/a0.gif', './num/b1.png', './num/c2.jpg' ); ### カウンターファイル名:自動作成します $numfile = 'numfile.log'; ### no cache flag; no-cache出力する=1、しない=0 $no_cache = 1; ########## ### カウント の取得 if (-e $numfile) { open(FILE, "<$numfile"); $total=<FILE>; close(FILE); $total =~ tr/\r\n//d; }else{ $total =0; open(FILE, "+>$numfile"); close(FILE); chmod 0666, $numfile; } $total ++; open(FILE, ">$numfile"); print FILE "$total\n"; close(FILE); ### 画像ファイル名の同定 $image = $files[$total % scalar(@files)]; ### 画像タイプ(拡張子で代用) $ImgType = ( split(/\./, $image) )[-1]; ### 画像ファイルを開く open(IMG, "$image") or &error(); # windows 用 入出力変更 binmode IMG; binmode STDOUT; # イメージの出力 print qq(Pragma: no-cache\n) if $no_cache; #←キャッシュを残させないで毎回画像を取得 print qq(Content-type: image/$ImgType\n\n); print while (<IMG>); # イメージファイルのクローズ close(IMG); exit; sub error{ print qq(Pragma: no-cache\n) if $no_cache; ### キャッシュを残させない print qq(Content-type: text/plain\n\n); print 'error !'; exit; } #####ここまで

takanekido
質問者

お礼

丁寧に対応していただき、たいへんありがとうございました。ただ、私にプログラミングの知識がなく、「猫に小判」状態です。返って迷惑をおかけいたしました。 御礼申し上げます。

関連するQ&A

専門家に質問してみよう