URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 59291
[ Назад ]

Исходное сообщение
"perl script"

Отправлено torre75 , 18-Авг-05 14:08 
есть вот такой скриптик корый записывает в файл 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);
   }

кто скажет где ошибка?
заранее благодарен


Содержание

Сообщения в этом обсуждении
"perl script"
Отправлено eleo , 18-Авг-05 14:28 
>my $host_name =hostname($ipnumber);

>print FI "$ipnumber   $link    $datenow  $hostname\n";

разные скаляры