1つだけ過去を変えられるとしたら?

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

A 回答 (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に指定すれば完了です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/24 15:39

簡易カウンタースクリプトをすこし書き換えればいけそうなので、作ってみました。


##### ここから:環境に合わせて適宜書き換え下さい
#!/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;
}
#####ここまで
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/04/05 18:32

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