РазделыАрхивы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 на части.
Чего хотелось бы пока избежать, точнее это делать всё равно придётся, для улучшения этой самой статистики, но лучше по плану - в марте следующего года.
30.08.2010 15:32 Автор/источник: Den1xxx

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

Вы не залогинены! Регистрация

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