Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


Perl для веб-мастера


Теперь точность показаний счетчика стала немного выше. Но как он поведет себя, если на нашу страницу зайдет одновременно два посетителя? Одновременно два процесса попытаются произвести запись в файл с показаниями счетчика, в результате чего все данные файла могут быть потеряны. Чтобы этого не допустить, необходимо запретить одновременный доступ к файлу нескольких процессов. Сделать это можно с помощью функции flock, которая позволяет заблокировать файл, связанный с дескриптором, от доступа из других скриптов. Немного изменим процесс работы с файлом count.txt:
open (COUNTFILE, "+<$namefile");
flock (COUNTFILE,2);
$count =readline(*COUNTFILE);
chomp ($count);
$count=$count + 1;
seek (COUNTFILE,0,0);
truncate(COUNTFILE,0);
print COUNTFILE "$count";
close(COUNTFILE);
Теперь поясненим наши действия.
1) Открываем файл для чтения и записи:
open (COUNTFILE, "+<$namefile");
2) Блокируем файл от доступа из других одновременно запущенных процессов выполнения скрипта
flock (COUNTFILE,2);
3) Считываем значение счетчика из файла
$count =readline(*COUNTFILE);
4) Удаляем символ конца строки (если он случайно неизвестно откуда появился)
chomp ($count);
5) Увеличиваем значение счетчика
$count=$count + 1;
6) Перемещаем указатель позиции в файле на его начало
seek (COUNTFILE,0,0);
7) Усекаем длину файла до текущей позиции (т. е. до начала файла, куда мы передвинули этот указатель предыдущей строкой)
truncate(COUNTFILE,0);
8) Записываем в файл новое значение счетчика
print COUNTFILE "$count";
9) Закрываем файл, одновременно снимая с него блокировку
close(COUNTFILE);
Итак, весь скрипт теперь будет иметь следующий вид:
#!/usr/bin/perl
$namefile="/home2/your_domen/public_html/mystat/count.txt";
$nameipfile="/home2/your_domen/public_html/mystat/ip.txt";
$ip=$ENV{"REMOTE_ADDR"};
open (IPFILE, "$nameipfile");
$ipold = ;
close(IPFILE);
chomp ($ipold);
if ($ipold eq $ip) {
exit;
}
open (IPFILE, "$nameipfile");
print IPFILE "$ip";
close(IPFILE);
open (COUNTFILE, "+<$namefile");
flock (COUNTFILE,2);
$count =readline(*COUNTFILE);
chomp ($count);
$count=$count + 1;
seek (COUNTFILE,0,0);
truncate(COUNTFILE,0);
print COUNTFILE "$count";
close(COUNTFILE);
print "Content-Type: text/htmlnn";
print "$count";
exit;

Другие статьи по теме:

- повышение индивидуального мастерства дизайнера
- аутентификация пользователей через веб-интерфейс
- введение в perl
- Perl для чайников от ns
- практическое применение perl-скриптов


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2024 © SMTI.RU
Главная страница | Связаться с нами