CGI-BBS > CGI > Perl > アクセス毎に画像をローテーションさせたい


カレッヂ
カレッヂ


質問者 山本  投稿日 2005/8/10(水) 23:03:29
#!/usr/local/bin/perl

#日付の取得
$today = (localtime(time))[3];

#更新日の取得
open(OPEN,"./lastdate.log");
@log = <OPEN>;
close(OPEN);

#日付変更時に画像の変更
if($log[0] != $today){
 #画像データの全読み込み(GIFのみ)./gifディレクトリを指定。
 opendir(DIR, "./gif");
 @imagefiles = grep { /\.gif/ } readdir(DIR);
 closedir(DIR);
 #画像ファイルのランダム取得
 $image = "./gif/".$imagefiles[rand(@imagefiles)];

 #データの更新
 open(OUT,"> ./lastdate.log");
 print OUT "$today\n";
 print OUT "$image";
 close(OUT);
}else{
 #同じ日付なら同じ画像
 $image = $log[1];
}
#GIF画像の出力
print "Content-type: image/gif\n\n";
#画像の書込
open(IMG,"$image");
binmode(IMG);
print while(<IMG>);
close(IMG);
というプログラムが以前ありましたがこれを改造しアクセス毎にしたいのです。
読み込み表示するのをjpegまたはjpgにしフォルダから自動的に画像のみのファイル数を取得できるようにしたいのです。
よろしくお願いします。

【習熟度】多少の改造ができる

回答者 ひろ  [削除]  投稿日 2005/8/11(木) 03:32:37
#!/usr/local/bin/perl

#--------- ここを設定  --------
my @allow_img_ext = ( 'gif', 'jpeg', 'jpg', 'png');#(1)使いたい画像の拡張子
my $image_dir = 'image';                           #(2)画像保存のディレクトリ名
#------------------------------

#日付の取得
$today = (localtime(time))[3];

#更新日の取得
open(OPEN,"./lastdate.log");
@log = <OPEN>;
close(OPEN);

#日付変更時に画像の変更
#if($log[0] != $today) {
	opendir(DIR, "./$image_dir") or die $!;
	
	my $ext = join('|', @allow_img_ext);# 正規表現生成
 	my @imagefiles = grep { /\.?($ext)$/ } readdir(DIR);
	
	closedir(DIR);
	
 	#画像ファイルのランダム取得
 	$image = "./$image_dir/".$imagefiles[rand(@imagefiles)];

 	#データの更新
 	open(OUT,"> ./lastdate.log") or die $!;
 	print OUT "$today\n";
 	print OUT "$image";
 	close(OUT);

#}else { 
#	$image = $log[1];#同じ日付なら同じ画像
#}

my ($out) = ($image =~ /\.?([a-z]+)$/);
($out eq 'jpg') && ($out = 'jpeg');

#GIF画像の出力
print "Content-type: image/$out\n\n";
#画像の書込
open(IMG,"$image");
binmode(IMG);
print while(<IMG>);
close(IMG);

exit;

使い方は簡単。
1.(1)で拡張子を設定。混在可。('jpg','jpeg')だけでもOK
2.(2)の名前のディレクトリ(フォルダ)を作成する。
3.2で作成したディレクトリにランダムに表示したい「画像ファイル」を放り込む

>フォルダから自動的に画像のみのファイル数を取得できるようにしたいのです。
意味が把握できなかったので保留(ファイル数を取得してどうしたいのか)

以上試してみてください。


質問者 山本  [削除]  投稿日 2005/8/11(木) 11:22:23
ありがとうございます。
フォルダから自動的に画像のみのファイル数を取得できるようにしたいのですはおかしいですね
ファイルのみを自動的に取得表示というか、ファイル名を連番とかあらかじめ設定したファイル名でなくasda6ds.jpgみたいな適当な英数字でも取得表示できるようにしたいという意味です。
私もひろさんみたいに自分で改造できるようにがんばりたいです。
質問者 山本  [削除]  投稿日 2005/8/11(木) 11:35:17
<img src="gazou.cgi">等でhtmlファイルから呼び出しているのですが表示されません。
また直接gazou.cgiにアクセスするとサイトに自動的に挿入される広告が文字化けを起こしてしまいます。
文字コードを変えたほうが良いのでしょうか?
回答者 ひろ  [削除]  投稿日 2005/8/11(木) 15:42:17
おそらく広告挿入による自動 header出力が、影響していると考えられます。
<img src="xxxxx.cgi">
こういう呼び出しをする物は、広告がじゃまをしてうまく動かないので、広告なしのサーバにする必要があります。
(レンタルサーバ xrea のように自分で広告Offにできるものもあります) 
とりあえずプロバイダなど、広告が入らないサーバで確認してみてください。

返信(回答)する

 


Web裏技