Отправляет email-рассылки с помощью сервиса Sendsay

PHP Wars: против целого мира

  Все выпуски  

Статья: Блок пост


Информационный Канал Subscribe.Ru

PHP Wars: против целого мира - выпуск 7

Вот и наступило время для седьмого выпуска нашей рассылки и прежде, чем начать непосредственно рассказывать вам о том, что же вы такого интересного сегодня прочитаете, я хотел бы заметить один радостный для меня как редактора рассылки факт: наша рассылка набрала за рекордное время - два дня - боле 400 подписчиков! Что ж, это говорит о нужности преподносимой нами информации.

Как я уже говорил в прошлом выпуске - мы продолжаем готовить для вас серию статей о защите скриптов. Ну а пока, что б был понятен дальнейший материал, мы остановимся на некоторых важных моментах. Все это неоднократно пригодится вам в будущем, да и мы будем повсеместно использовать приемы описанные сейчас. Вникайте…

Iprit, глав(в)ред рассылки.

Сегодня в выпуске.

  • Статья "Блок пост", в которой рассказывается о правильном использовании функции flock(). Эту статью нам любезно предоставил наш новый и, надеюсь, постоянный автор. Вы так же можете посетить его проект http://phpcode.alfaspace.net/.
  • Не много новостей из мира Интернет от Rynet@News.
  • Новости ПО от http://Ymt.pp.ru/.
  • (!)Ну, и конечно, новые фото-подробности из жизни глав(в)реда рассылки - т.е. меня. Картинки за "жЫсь" админа.


Блок пост.

Вы не знайте что это такое блокировка файла? Это мы сейчас исправим. Первый и главный вопрос: "Зачем нужна эта блокировка?". Если вам хочется, чтобы ваши скрипты работали с файлами нормальным образом, а не как попало, то она вам просто необходима.

Вот что говорит по этому поводу PHP Manual:
bool flock ( resource handle, int operation [, int &wouldblock])
handle - это дескриптор файла.
operation может принимать одно из следующих констант:
LOCK_SH (или 1) - блокировка на чтение. Т.е. файл может использоваться совместно с другими читающимися приложениями;
LOCK_EX (или 2) - блокировка записи. Т.е. файл не доступен для совместного использования;
LOCK_UN (или 3) - снятие существующей блокировки;
LOCK_NB (или +4) - эту константу можно прибавить к одной из предыдущих, если вы хотите чтобы программа не повисала в ожидании своей очереди.
&wouldblock - самому интересно, что это такое (в официальном PHP Manual'e ни слово про этот параметр, мол есть такой и этим все сказано).

Посмотрели, подумали. Мдааа... и как это все работает? Что ж, ничего не остается, как написать какой-нибудь глупый скрипт.

Глупый скрипт:

<?php
if ($_GET['t']=='1') $data = 'one';
if ($_GET['t']=='2') $data = 'two';
if ($_GET['t']=='3') $data = 'three';
if (empty($_GET['t'])) $data = 'none';

$fname = "data.dat";
$fp = fopen($fname, "a+");
For ($j=0; $j < 20; $j++)
{
    fputs($fp,$data."\n");
    sleep(1);
}
fclose($fp);
?>
[Базова работа с файлами описана тут: PHP для начинающих (часть 2)]

Посмотрим, что получилось... Вбиваем последовательно в браузер:

http://localhost/test.php?t=1
http://localhost/test.php?t=2
http://localhost/test.php?t=3
[Установка локально сервера с php и mysql описана тут: PHP - руководство для начинающих. Часть 1]

Нам по идее нужно глянуть, что получится, если одновременно запустят скрипт несколько человек. В общем, вбиваем в 3х окошках эти ссылки. Ждем у моря погоды. Идем к data.dat и смотрим, что же там получилось? Получилось не все так плохо, т.е. все перемешалось. А нам надо сначала записать 20 раз какую-либо одну строчку (либо one, либо two...), а получается все вперемешку. Теоретически, мог произойти худший вариант и все данные в data.dat потерялись бы (такого я не наблюдал, но это вполне возможно). Думаю, ответ на поставленный вопрос просто - блокировка нужна для корректной работы множества скриптов (или их копий) с одним файлом. Самое время исправить ситуацию:

<?php
if ($_GET['t']=='1') $data = 'one';
if ($_GET['t']=='2') $data = 'two';
if ($_GET['t']=='3') $data = 'three';
if (empty($_GET['t'])) $data = 'none';

$fname = "data.dat";
$fp = fopen($fname, "a+");
flock($fp, 2);
For ($j=0; $j < 20; $j++)
{
    fputs($fp,$data."\n");
    sleep(1);
}
flock($fp, 3);
fclose($fp);
?>

Вроде жизнь наладилась и скрипт работает, как мы хотели. Но не тут то было. Дело в том, что есть такой замечательный файлик - php.ini и в нем не менее замечательная переменная max_execution_time = 30 (значение этого параметра можно увидеть через phpinfo()).

О max_execution_time.

; Максимальное возможное время выполнения сценария в секундах. Если
; сценарий будет выполняться дольше, PHP принудительно завершит его.
max_execution_time = 30; 
Т.е. наш скрипт выпадет с ошибкой
Fatal error: Maximum execution time of 30 seconds exceeded in c:\web_s\apache\doc\test.php on line 16

Так что, если наш скрипт сначала запустим с t=1 и t=2 почти одновременно (т.к. в случае с блокировкой одновременно не получится), то c параметром t=1 скрипт сделает 20 записей в файле, а вот скрипт с t=2 примерно 10. Все дело в том, что скрипту дается 30 сек на все про все. И когда запускает скрипт с t=1, а следом с t=2 , то последний ждет, как минимум 20 сек, а потом скрипт начинает делать свое "грязное дело" и через 10 сек принудительно завершается. Нас это не устраивает, поэтому мы его еще разок переделаем.

<?php
if ($_GET['t']=='1') $data = 'one';
if ($_GET['t']=='2') $data = 'two';
if ($_GET['t']=='3') $data = 'three';
if (empty($_GET['t'])) $data = 'none';

$fname = "data.dat";
$fp = fopen($fname, "a+");
while(!flock($fp,LOCK_EX+LOCK_NB) && $i<5) {
    echo "Пытаемся получить доступ к файлу 
"; sleep(1); // ждем 1 секунду $i++; } if ($i!=6) { For ($j=0; $j < 10; $j++) { fputs($fp,$data."\n"); sleep(1); } flock($fp, LOCK_UN); echo "Запись в файл внесена."; } else { echo "Доступ к файлу в данный момент не возможен. Повторите попытку позже."; } fclose($fp); ?>

Наконец-то совершилось чудо и мы увидели рабочий вариант. Вроде теперь то можно радоваться? Нет, пока еще рано. Нужно проследить, чтобы везде при обращении к этому файлу (чтение, запись) стояла блокировка. Иначе толку с вашей блокировки не будет. Другими словами, если вам надо вывести данные из файла в браузер, то нужно ставить блокировку на чтение. Не пугайтесь, файл будут читать сразу несколько человек (ожидания не будет).

<?php
$fname = "data.dat";
$fp = fopen($fname, "a+");
if (flock($fp,LOCK_SH))
{
    while (!feof($fp))
 {
        $q[]=fgets($fp, 500);
        $n++;
    }
flock($fp, LOCK_UN);
}
fclose($fp);
for($i=0; $i<$n; $i++)
{
 echo $q[$i]."
"; } ?>

Стоит так же упоминуть что, чем раньше уберем блокировку, тем всем от этого будет лучше. И так же стоит помнить, что чем больше нагрузка на скрипт (и чем дольше он выполняется), тем меньше мы должны "ожидать" (while(!flock($fp,LOCK_EX+LOCK_NB) && $i<5) {} ), т.к. скипту нужно время, чтобы выполнится _ПОЛНОСТЬЮ_ .

(!)Так же хочу заметить, что на нашем сайте лежит не менее достойная статья о том, как правильно работать с файлами. Оба материала взаимно дополняют друг друга. Рекомендую ознакомится.

Нам очень важно Ваше мнение о нашей рассылке, если у вас есть какие-либо пожелания или предложения, Вы хотите высказать свое мнение по поводу опубликованного материала, то пишите нам.

Новости из мира Интернет от Rynet@News

Подробности об Internet Explorer 7

Информация о том, что в новой версии самого популярного браузера появится множество изменений, появлялась уже не раз в интернет-СМИ. Делать догадки, какими они будут, проще простого - в "ослике" накопилось столько недостатков, по сравнению с конкурентами, так что добавление в него самых распространенных функций (браузеринг во вкладках, мышиные жесты), давно реализованных во множестве "надстроек" (MyIE и т.д.), уже делало бы новую версию революционной. Однако до недавнего времени подобные новости относились к категории слухов - не было ни одного официального сообщения или комментария разработчиков по поводу предстоящих изменений. И вот, пару дней назад, на официальном блоге один из членов группы разработчиков Microsoft Internet Explorer сообщил тот перечень изменений, которые планируется реализовать. Во-первых, будут закрыты многочисленные уязвимости в системе безопасности, из-за которых IE давно считается решетом. Во-вторых, будут поддерживаться ключевые элементы рекомендаций World Wide Web Consortium (W3C) - это Portable Network Graphics (PNG) и формат изображений и стандарта оформления веб-страниц Cascading Style Sheet (CSS). Ситуация, когда самый используемый браузер, мягко говоря, не соответствует утвержденным стандартам, заставляет web-разработчиков программировать страницы двух видов: для IE и для всех остальных.

Подобные заявления, по мнению экспертов, не могут не радовать, однако опасения, что поддержка стандартов W3C останется на словах или будет реализована не в полном объеме, уже высказываются. Насколько они обоснованы, в ближайшее время поможет выявить один единственный факт: согласится ли Microsoft на предложение протестировать ее детище программой Acid, опубликованной на сайте Web Standards Project?

Количество Spyware в Сети снижается

По данным исследовательской компании Webroot, количество сайтов, использующих шпионское программное обеспечение для слежения за своими посетителями, снизилось почти на 50%, по сравнению с аналогичным кварталом прошлого года. Как пояснил директор Webroot, Ричард Стиннон (Richard Stiennon), в первую очередь, это связано с массовой компанией, проведенной в Сети по недопущению использования таких способов сбора информации о потенциальных клиентах, как индексация посещаемых ими страниц, сбор данных о вводимых запросах (key loggers) или подмены стартовой страницы. Пользователи стали больше обращать внимания на ПО, помогающее выявить и избавиться от spy или adware. Последние считаются меньшим злом и, по оценке Interactive Advertising Bureau, опубликовавшей отчет за 2004 год о суммах, вырученных посредством рекламы в Сети, приносят $2 млрд. (из общей суммы в $9,6 млрд.) своим хозяевам. В этой ситуации Ричард Стиннон прогнозирует, что примерно 12-18% сайтов в Сети не откажутся от порочной практики и будут продолжать использовать нежелательное ПО.


Новости ПО от http://Ymt.pp.ru/

Winamp 5.09

Обновился популярный медиаплеер, обладающий широчайшим диапазоном возможностей. В отдельных представлениях и подробных описаниях функций эта программа не нуждается. Стоит сказать, что Winamp поддерживает большинство форматов аудио и видео-файлов, может конвертировать mp3 файлы из обычных музыкальных CD и записывать их на компьютер, может прожигать CD-диски на пишущем приводе и т.д. Плеер выпускается в трёх вариантах: Lite (облегчённая версия), Full (полная версия) и Pro (профессиональная, платная версия). Обратите внимание на то, что Lite-версия плеера не включает в себя модули визуализации (Visualization Studio) и поддержку Windows Media и M-Juice audio. В этой версии улучшена работа медиа-библиотеки (Media Library), появилась возможность воспроизводить WMA-файлы (для этого должен быть установлен плагин WaveOut), улучшено воспроизведение видео-файлов, исправлены ошибки, внесены другие изменения. Windows NT/2000/XP/2003 , Free, EN Скачать Full-версия [4720 Kb] Скачать Lite-версия [839 Kb]

Telephone VOX recorder MP3 1.3

Новая версия программы, предназначенной для записи и архивации в МР3 формате телефонных переговоров через компьютер. Средствами программы можно записать речь из любых речевых сообщений, с каналов телефонной связи, радиосвязи, устройств снятия речевой информации или микрофона с последующим воспроизведением в любое удобное время, в том числе и во время записи одновременно. Telephone VOX recorder умет включать запись автоматически при появлении звукового сигнала (разговора) на входе звуковой карты (система VOX) с последующим автоматическим отключением после завершения разговора. Программа содержит менеджер записанных с её помощью файлов для быстрого и удобного просмотра записей. Для сжатия в МР3 формат используется кодек Lame. Win9*/ME/NT/2K/XP, Free, RU Скачать [788 Kb]

Netobjects Fusion 8.00.0000.5030

Тем кто не хочет вникать в подробности HTML, а просто хочеть создать свой сайт своими руками за короткое время - NetObjects Fusion 8 идеальный инструмент для экспериментов. С каждой новой версией в программе появляються новые профессиональные возможности не только для создания, но и легкого управления сайтами. Скачиваем прогу, идем на сайт, у них заполняем анкету и на мыло прийдет ссылка для легализации проги Windows 95/98/NT/ME/2000/XP, Free/Shareware,EN Скачать Вход на сайт для регистрации


(!)Картинки за "жЫсь" админа.

  • Это мое собственное чудо генетики - собако-свино-бобр. А что? С виду пес. Хвост крючком, нос пяточком - чем не поросенок. Но, как свидетельствует беспристрастный объектив, еще и любитель древесного волокна. Значит, в глубине души, он все же бобр!
  • А это начало моего рабочего дня. На столе еще совсем чисто - ни обрезков проводов, ни кучи дисков, - идеальный порядок, не то, что дома!
  • Ну, и на последок, фотка с моего предыдущего места работы - местной городской газеты. Картина называется "огрызок под столом". Кстати, у меня еще есть просто эксклюзивно разоблачающие фотки из редакции этой газеты. Друзья (!), высказываете свои мысли в форуме нашего сайта по поводу "какими делать новые фото-подробности". Кстати, если наберется достаточное количество одобряющих постов, то, обещаю, в следующем выпуске вы увидите просто ужасные картины - процесс работы над новым выпуском крупнейшей газеты моего города!

На сегодня это все. Очередной выпуск нашей рассылки ждите как обычно в следующее воскресенье. Продолжение неизбежно…
© PHP Wars 2005, Все права на материалы принадлежат их авторам. Перепечатка или любое другое использование материалов рассылки разрешается только с письменного разрешения.

http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.phpwars
Отписаться

В избранное