Forum Webscript.Ru
Программирование => Perl => Тема начата: Sergo_stavropol от 27 Сентября 2002, 14:08:07
-
Друзья, хелп!
Что-то я окончательно запутался во множестве примеров, а нужно решить элементарнейшую задачу. Решил, что лучше спросить всего один раз у знающих людей, чем лопаптить инет.
В общем, нужно определить ip посетителя и записать ip в файл
Насчет определить ip понятно, с файлом мучаюсь
#!/usr/bin/perl
$ip=$ENV{\'\'REMOTE_ADDR"};
а дальше как быть?
огромное все спасибо!!!!!!
-
#!/usr/bin/perl
use strict;
my $ip=$ENV{\'\'REMOTE_ADDR"};
my $counterfile=\'ip.txt\';
print "Content-type: text/html\\n\\n";
open (CF,">$counterfile")|| die "Не могу записать в каунтерфайл: $!";
print CF $ip;
close(CF);
-
open (CF,">$counterfile")|| die "Не могу записать в каунтерфайл: $!";
Если нужно кучу IP записать в один файл, то наверное правильнее ( хм... куда уж правильнее :D ) было бы append\'ить:
open (CF,">>$counterfile")|| die "Не могу записать в каунтерфайл: $!";
-
куда уж правильнее
из вопроса это не следует.
-
2NeoNox:
Цитата:
куда уж правильнее
из вопроса это не следует.
Никакого наезда на вопрос и ответ, если он [наезд] там просматривается. :-|
-
mike :D. Тебе показалось. Все Ок!
Я лишь сказал, что задача поставлена так:
нужно определить ip посетителя и записать ip в файл
-
Спасибо!
Да, я действительно не сказал, что нужно было кучу ip записать, а это дейтсвительно так
Более того, хотелось бы ip заносить в новую строчку при каждом новос коннекте (даже если это тот же самый ip)
Сорри что сразу не сформулировал сразу правильно задачу. Если можно, подскажите плиз еще и это :)
Заранее БЛГДРН.
-
В общем, чтобы было совсем уж конкретно, попрошу перевести нижеприведенный php-скрипт в cgi-скрипт
$ip = getenv(\'REMOTE_ADDR\');
$host = gethostbyaddr($ip);
$date=date(\'d-m- Y, H:i:s\');
$os=$HTTP_USER_AGENT;
$lf=fopen("logzzz",\'a\');
fwrite($lf,"\\n $date $ip $host $os");
$lf=fclose($lf);
мужики, с меня :beer: :)
-
#!/usr/bin/perl
use CGI::Carp qw(fatalsToBrowser);
$counterfile = "log.txt"; #Файл, куда это добро сваливается
# Снимаем текущую дату \'d-m- Y, H:i:s\'
($second,$minute,$hour,$day,$month,$year,$weekday) = (localtime(time))[0,1,2,3,4,5,6];
$year +=1900;
if ($minute < 10) {$minute = "0"."$minute";}
if ($second < 10) {$second = "0"."$second";}
if ($hour eq "0") {$hour = "12";}
if ($month < "10") {$month = "0".$month}
if ($day < "10") {$day = "0".$day}
$time = "$day-$month-$year, $hour-$minute-$second";
# Снимаем всякие переменные окружения
$ip = $ENV{\'REMOTE_ADDR\'};
@digits = split (/\\./, $ip);
$address = pack ("C4", @digits);
$host = gethostbyaddr ($address, 2);
$language = $ENV{\'HTTP_ACCEPT_LANGUAGE\'};
$http_referer = $ENV{\'HTTP_REFERER\'};
$remote_addr = $ENV{\'REMOTE_ADDR\'};
$http_user_agent = $ENV{\'HTTP_USER_AGENT\'};
$request_uri = $ENV{\'REQUEST_URI\'};
if ($ENV{\'HTTP_REFERER\'} eq "") {$http_referer = "None";}
print "Content-type: text/html\\n\\n";
$log_vars = "$time|$remote_addr|$http_user_agent|$request_uri|$http_referer|$language|$host \\n";
open (CF,">>$counterfile")|| die "Не могу записать в каунтерфайл: $!";
print CF $log_vars;
close(CF);
Разделители между значениями "|"
-
> $time = "$day-$month-$year, $hour-$minute-$second";
И получаем "28-08-2002, 9-27-17", а на дворе осень...
-
Огромное всем спаибо!!!
Все пошло!!
:beer:
:beer:
:beer:
-
И получаем "28-08-2002, 9-27-17", а на дворе осень...
[OFF]
Не может быть! У нас в Киеве лето :)
[/OFF]
Sergo_Stavropol, поправь код. Лажанулся я...
# Снимаем текущую дату \'d-m- Y, H:i:s\'
($second,$minute,$hour,$day,$month,$year,$weekday) = (localtime(time))[0,1,2,3,4,5,6];
$year +=1900;
$month++;
if ($minute < 10) {$minute = "0"."$minute";}
if ($second < 10) {$second = "0"."$second";}
if ($hour eq "0") {$hour = "12";}
if ($month < "10") {$month = "0".$month}
if ($day < "10") {$day = "0".$day}
$time = "$day-$month-$year, $hour-$minute-$second";
-
Спасибо еще раз тов. NeoNox!
Все великолепно работает.
Только по пути как обычно возникают еще вопросы: например, как сделать так, чтобы новая запись в каунтерфайл выводилась в начале списка?
Заранее БЛГДРН.
PS Чувствую, надо регаться. Форум классный, реальная помощь чайникам. :) :beer:
-
Только по пути как обычно возникают еще вопросы: например, как сделать так, чтобы новая запись в каунтерфайл выводилась в начале списка?
С этим посложнее будет, т.к. нужно сначала создавать временный файл, писать в начало нужную строку, дописывать старое... А это - тормоза. Так ли нужно это в логе?
2NeoNox: из чисто академического интереса такой вопрос. Есть код
if ($minute < 10) {$minute = "0"."$minute";}
if ($second < 10) {$second = "0"."$second";}
if ($hour eq "0") {$hour = "12";}
if ($month < "10") {$month = "0".$month}
if ($day < "10") {$day = "0".$day}
$time = "$day-$month-$year, $hour-$minute-$second";
Здесь sprintf не используется из соображений скорости, безопасности? Т.к. гораздо приятнее было бы
if ($hour == 0) {$hour = 12}
$time = sprintf "%02d-%02d-%04d, %02d-%02d-%02d",
$day,$month,$year,$hour,$minute,$second;
:)