СтатьиАрхивыReloadCMS → Добавлена защита файлов при чтении.

Добавлена защита файлов при чтении.



На этом сайте проводится эксперимент с защитой от обнуления файлов при большой нагрузке, без использования MySQL.

Сегодня какой-то сканер опять прошёлся по моему сайту, что привело к обнулению счётчика.

Я намеренно не хотел добавлять защиту файла при чтении, см. предыдущую статью по этой теме. Хотел посмотреть, что получится без этого.

Сам такой нагрузки на сервер я создать не мог - не обладаю компьютерами-зомби, могущими атаковать с разных IP. И вот случилось - "добрые" люди (точнее, роботы) помогли протестировать. Счётчик опять обнулился менее 2 часов назад.

В этой ситуации осталась ещё одна возможность - добавить дополнительную защиту в ./modules/engine/statistic.php - защиту файла при чтении.



function statistic_register():

Было:
Цитата:
if(is_file(DATA_PATH . 'stats.dat')) {



$stats = @file(DATA_PATH . 'stats.dat');

$stats = @unserialize($stats[0]);

}
Стало:
Цитата:
if(is_file(DATA_PATH . 'stats.dat')) {

$fp=fopen(DATA_PATH . 'stats.dat',"r"); // добавил открытие

if (flock($fp, LOCK_SH)) { //запирание общее - Den1xxx!

$stats = @file(DATA_PATH . 'stats.dat');

$stats = @unserialize($stats[0]);

flock($fp, LOCK_UN);} // отпереть

else trigger_error(__('Error occured').': function statistic_register.15: ' .$fp,E_USER_ERROR);

fclose($fp); //закрыть

}
Здесь: function statistic_register.15 - функция+номер строки, вызвавшей ошибку в функции, чтоб легче искать где.

Посмотрим теперь, кто кого - я или роботы.

Если и этот метод провалится, то последняя возможность не использовать MySQL - разбить файл stats.dat на части.

Чего хотелось бы пока избежать, точнее это делать всё равно придётся, для улучшения этой самой статистики, но лучше по плану - в марте следующего года.
Дата 2010-08-30 16:32:27

Комментировать

Вы не залогинены!

Устал читать? Напиши! Или позвони +375 29 5344286. На связи по будним дням с 800 до 1700.