есть вот такой скриптик корый записывает в файл ip, link, date, hostname узера котрый нажал на определенй линк. На самом деле скрипт сделан из двух:1. записывает ip,link, date.
2. по ip определяет hostname.
Теперь в первый скрипт добавляю sub hostname что бы в файл записывался и hostname.
проблема в том что отдельно они работают нормально а когда связываю в одном ip,link,date записывает а hostname - нет.
вот что получилось:
#!/usr/bin/perl -w
use Socket;
#use strict;
$UNIX = 1;
# If you are not running this on a UNIX platform set $UNIX = 0; instead
$path = ".";
# The system path to the log file. Leave as a "." if in the same folder
# as this script.
$datafile = "fail.txt";
# The filename of the log.
$datestyle = "1";
# Set to 1 if you want month to appear first in the date string
#################################
# End of user editable section #
#################################
&read;
$link = $input{'link'};
&read_date;
$ipnumber = $ENV{'REMOTE_ADDR'};
my $host_name =hostname($ipnumber);
####################################
if ((($datestyle eq "1")))
{ $datenow = "$day/$month/$h:$m:$s"; }
else {$datenow = "$day/$month";}
open (FI, ">>$path/$datafile");
if ((($UNIX eq "1"))) { flock (FI, 2); }
print FI "$ipnumber $link $datenow $hostname\n";
if ((($UNIX eq "1"))) { flock (FI, 8); }
close (FI);
print "Location: $link\n\n";
exit;
sub read
{
if ($ENV{'CONTENT_LENGTH'}){read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});}
elsif ($ENV{'QUERY_STRING'}){$buffer = $ENV{'QUERY_STRING'};}
if ($buffer) {@pairs = split(/&/, $buffer);
foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $input{$name} = $value; } }
}
sub read_date
{
($s, $m, $h, $day, $month, $year, $dw, $date, $dl) = localtime(time());
$month++;
}
sub hostname
{
my (@bytes, @octets,
$packedaddr,
$raw_addr,
$host_name,
$ip
);
if($_[0] =~ /[a-zA-Z]/g) {
$raw_addr = (gethostbyname($_[0]))[4];
@octets = unpack("C4", $raw_addr);
$host_name = join(".", @octets);
} else {
@bytes = split(/\./, $_[0]);
$packedaddr = pack("C4",@bytes);
$host_name = (gethostbyaddr($packedaddr, 2))[0];
}
return($host_name);
}
кто скажет где ошибка?
заранее благодарен
|