#!/usr/bin/perl
# !/usr/local/bin/perl
use strict;
require "sub.pl";
#------------------ 設定項目 ------------------
my $myDBase	="cssjdl";

#------------------ 以上 ------------------

my $buffer = $ENV{'QUERY_STRING'};
my %FORM;
&form_dec;

my $conn;
my $pathname=$FORM{"name"};

if(index($pathname, "/") > 0) {&error; exit;}
if(index($pathname, "..") > 0) {&error; exit;}
if($pathname eq "") { &error; exit;}
if(!(-e $pathname)) { &error; exit;}

my $fname=substr($pathname,rindex($pathname,"/")+1);

my @fileinfo = stat ($pathname) ;
my $filesize = $fileinfo[ 7 ];

print "Content-type: application/octet-stream; \n"; 
print "Content-Disposition: attachment; filename=\"$fname\"\n"; 
print "Content-Length: ".$filesize."\n\n";
FileStream($pathname); 

$conn=db_connect($myDBase);
my $sql="SELECT count(hit) FROM counter WHERE file='$pathname' and date='today';";
my $sth=$conn->prepare($sql);$sth->execute;
my ($hit) = $sth->fetchrow_array; $sth->finish;

if($hit) {
	$sql="UPDATE counter set hit=hit+1 WHERE file='$pathname' and date='today';";
	$sth=$conn->prepare($sql);$sth->execute;$sth->finish;
} else {
	$sql="INSERT INTO counter(date,file,hit) values('today','$pathname',1);";
	$sth=$conn->prepare($sql);$sth->execute;$sth->finish;
}
$conn->disconnect;

exit;

#ファイルを出力
sub FileStream {
	(my $file)=@_;
	open(IN, "$file"); 
	binmode(IN); 
	binmode(STDOUT);
	while (<IN>) { print; } 
	close(IN); 
}

#フォームからデータ取得
sub form_dec {
	my @pairs = split(/&/,$buffer);
	foreach my $pair (@pairs) {
		(my $name, my $value) = split(/=/, $pair);
		$FORM{$name} = $value;
	}
}

#エラー処理
sub error {
	print "Content-type: text/html\n\n";
	FileStream("dlerror.html");
	exit;
}

#CREATE TABLE counter (
#id       SERIAL NOT NULL,
#date     DATE,
#file     TEXT,
#hit      INTEGER,
#PRIMARY KEY (id)
#);
