Автор Тема: Запись в файл: подскажите раз и навсегда!  (Прочитано 4316 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Sergo_stavropol

  • Гость
Друзья, хелп!
Что-то я окончательно запутался во множестве примеров, а нужно решить элементарнейшую задачу.  Решил, что лучше спросить всего один раз у знающих людей, чем лопаптить инет.

В общем, нужно определить ip посетителя и записать ip в файл
Насчет определить ip понятно, с файлом мучаюсь

#!/usr/bin/perl
$ip=$ENV{\'\'REMOTE_ADDR"};

а дальше как быть?

огромное все спасибо!!!!!!

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запись в файл: подскажите раз и навсегда!
« Ответ #1 : 27 Сентября 2002, 14:44:40 »
#!/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);
The documentations is your friend

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запись в файл: подскажите раз и навсегда!
« Ответ #2 : 27 Сентября 2002, 15:25:26 »
Цитировать

open (CF,">$counterfile")|| die "Не могу записать в каунтерфайл: $!";


Если нужно кучу IP записать в один файл, то наверное правильнее ( хм... куда уж правильнее :D ) было бы append\'ить:

open (CF,">>$counterfile")|| die "Не могу записать в каунтерфайл: $!";
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запись в файл: подскажите раз и навсегда!
« Ответ #3 : 27 Сентября 2002, 15:55:47 »
Цитировать
куда уж правильнее

из вопроса это не следует.
The documentations is your friend

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запись в файл: подскажите раз и навсегда!
« Ответ #4 : 27 Сентября 2002, 16:37:48 »
2NeoNox:

Цитировать
Цитата:
куда уж правильнее

из вопроса это не следует.


Никакого наезда на вопрос и ответ, если он [наезд] там просматривается. :-|
[ основной браузер когда-то был, теперь попробуй разберись =]

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запись в файл: подскажите раз и навсегда!
« Ответ #5 : 27 Сентября 2002, 16:52:41 »
mike :D. Тебе показалось. Все Ок!
Я лишь сказал, что задача поставлена так:
Цитировать
нужно определить ip посетителя и записать ip в файл
The documentations is your friend

Sergo_Stavropol

  • Гость
Запись в файл: подскажите раз и навсегда!
« Ответ #6 : 28 Сентября 2002, 07:06:33 »
Спасибо!
Да, я действительно не сказал, что нужно было кучу ip записать, а это дейтсвительно так
Более того, хотелось бы ip заносить в новую строчку при каждом новос коннекте (даже если это тот же самый ip)
Сорри что сразу не сформулировал сразу правильно задачу. Если можно,  подскажите плиз еще и это :)

Заранее БЛГДРН.

Ленивый гость

  • Гость
Запись в файл: подскажите раз и навсегда!
« Ответ #7 : 28 Сентября 2002, 07:13:33 »
В общем, чтобы было совсем уж конкретно, попрошу перевести нижеприведенный 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:  :)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запись в файл: подскажите раз и навсегда!
« Ответ #8 : 28 Сентября 2002, 14:34:10 »
#!/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);


Разделители между значениями "|"
The documentations is your friend

Оффлайн КшЫуфксрук

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 99
  • +0/-0
  • 0
    • Просмотр профиля
    • http://risearch.org/
Запись в файл: подскажите раз и навсегда!
« Ответ #9 : 28 Сентября 2002, 19:28:39 »
> $time = "$day-$month-$year, $hour-$minute-$second";

И получаем "28-08-2002, 9-27-17", а на дворе осень...

Sergo_Stavropol

  • Гость
Запись в файл: подскажите раз и навсегда!
« Ответ #10 : 29 Сентября 2002, 13:02:59 »
Огромное всем спаибо!!!
Все пошло!!
:beer:
:beer:
:beer:

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Запись в файл: подскажите раз и навсегда!
« Ответ #11 : 30 Сентября 2002, 10:44:24 »
Цитировать
И получаем "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";
The documentations is your friend

Sergo_stavropol

  • Гость
Запись в файл: подскажите раз и навсегда!
« Ответ #12 : 04 Октября 2002, 18:29:08 »
Спасибо еще раз тов. NeoNox!
Все великолепно работает.
Только по пути как обычно возникают еще вопросы: например, как сделать так,  чтобы новая запись в каунтерфайл выводилась в начале списка?

Заранее БЛГДРН.

PS Чувствую, надо регаться. Форум классный,  реальная помощь чайникам. :) :beer:

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Запись в файл: подскажите раз и навсегда!
« Ответ #13 : 04 Октября 2002, 20:32:30 »
Цитировать
Только по пути как обычно возникают еще вопросы: например, как сделать так, чтобы новая запись в каунтерфайл выводилась в начале списка?

С этим посложнее будет, т.к. нужно сначала создавать временный файл, писать в начало нужную строку, дописывать старое... А это - тормоза. Так ли нужно это в логе?

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;

:)
« Последнее редактирование: 04 Октября 2002, 21:34:30 от mike »
[ основной браузер когда-то был, теперь попробуй разберись =]

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28