Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: удаление пользователя через определенный срок.
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Мне необходимо, чтобы пользователь автоматически удалялся из БД, если он не посещал сайт в течении 30 суток и отправить ему на мыло, что он был удален. Как это реализовать?
Ch_chov
Отправлено: 09 Октября, 2010 - 11:26:10
Постоянный участник
Покинул форум
Сообщений всего: 2121
Дата рег-ции: Июль 2008 Откуда: из города
Помог: 90 раз(а)
c помощью cron
JustUserR
Отправлено: 09 Октября, 2010 - 11:58:00
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ginec пишет:
Как это реализовать
Для реализации задач автоматизации на web-ресурсах возможно построение схемы использующей исключительно возможности PHP-скриптов без сторонних приложений - суть решения заключаитеся в создании списка задач выполнение которого постепенно происходит в фоновом режиме при обращении к любым из PHP-скриптом вашего сервера - для обеспесчения безопасности необходимо применять дополнительную проверку на максимальное число выполняемых заданий При использовании такой схемы в условиях низкой посещаемости общая эффективност сохраняется - поскольку если в списке задач имеется очень малое число пользователей и посещаемость равно нулю то их скорое удаление не принципально - в любом другом случае удаление старных пользователей будет проихводится пропорционально
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Пит
Отправлено: 09 Октября, 2010 - 12:02:22
Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Май 2010
Помог: 0 раз(а)
кроном, как посоветовали. сделай скрипт на проверку числа и, например 1 раз в день, проверяй всю таблицу юзерей на "> 30 дней с посещения". т.е. когда открывается новая сессия, или неважно кто заходит на сайт запускается скрипт, выбирающий из базы данных или из файла всего 1 булевское поле, означающее, что сегодня уже база данных чистилась/нет. если скрипт видит, например true - чистилась, завершает свое выполнение, если нет, запускает модуль очистки всех неактивных более n дней юзверей. правда, при втором варианте, хоть он и платформонезависим (от крона) тот, на кого выпадет честь запустить этот скрипт своим заходом на сайт, может долговато ждать прогрузки страницы, если БД большая
JustUserR
Отправлено: 09 Октября, 2010 - 12:08:04
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Пит пишет:
Кроном, как посоветовали
Для реализации указанной задачи использование планировщика cron является не более приоритетеным решением чем создание списка выполняемых дейтсивий - поскольку предложенная схема является адаптивной и распределяет нагрузку в соответствии с посещаемость и количетсвом пользователей - в то время как запуск по расписанию не позволяет достичь адатиационного эффекта Многие системы web-сервисов такие как torren-tracker хотя и требуют постоянного обновления - но реализуют это путем реакции на клиентские запросы и списк очереди
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Valdemar
Отправлено: 09 Октября, 2010 - 14:37:33
Новичок
Покинул форум
Сообщений всего: 9
Дата рег-ции: Март 2010
Помог: 0 раз(а)
ginec пишет:
Мне необходимо, чтобы пользователь автоматически удалялся из БД, если он не посещал сайт в течении 30 суток и отправить ему на мыло, что он был удален. Как это реализовать?
Алгоритм приблизительно следующий:
1. Получаем текущую дату и время в unix-формате ($thisdate);
2. Получаем дату и время (опять же в unix) - (минус) 30 дней ($lastdate);
3. Из БД выбираем пользователей, у которых дата последнего посещения меньше чем $lastdate;
4. В цикле производим удаление всех пользователей, кто посещал сайт месяц или более назад;
5. Отправляем письмо с оповещением об удалении пользователя;
// из базы выбираем пользователей, которые посещали сайт месяц и более месяца назад. Здесь же добавлю, что время последнего посещения хранить в unix (varchar (20))
$query="SELECT * FROM `users` WHERE `lastvisit` < '".$lastdate."'";
ИМХО, удалять пользователей после 30 дней непосещения несколько нецелесообразно. Пользователь может отсутствовать в виду серьезных неприятностей, серьезной болезни и т.д. и т.п. Лучше всего удалять через 60-90 дней. Хотя, все дело в предпочтениях...
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Valdemar пишет:
4. В цикле производим удаление всех пользователей, кто посещал сайт месяц или более назад;
зачем?
Можно одним запросом: "DELETE FROM `users` WHERE `lastvisit` < '" . $lastdate . "'"
----- PostgreSQL DBA
ginec
Отправлено: 09 Октября, 2010 - 15:12:17
Новичок
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Valdemar спасибо за скрипт! удаление пользователя я привел, как пример и удалять его не буду Как удалять пользователя из БД я знаю, а вот как это сделать, чтобы скрипт запускался автоматом для каждого - не знаю. Про cron узнал только сегодня
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Valdemar пишет:
ginec пишет:
а вот как это сделать, чтобы скрипт запускался автоматом для каждого - не знаю
В смысле?
скрипт ведь должен запуститься. Я же не буду открывать его каждый час сам, тем более если будет важен каждый час.
Теперь буду выполнять такие задачи с помощью cron. Буду запускать php-скрипт через определенное время.
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Мелкий, у меня такая ситуация. Юзер загружает картинки, причем сколько их - я не знаю. Когда скрипт загружает картинки в цикле, то формируется массив $img[имя_файла] = размер_файла; Есть таблица с полями id name size. Я все это пихаю в цикле foreach:
Покинул форум
Сообщений всего: 41
Дата рег-ции: Окт. 2010
Помог: 0 раз(а)
Всем спс, cron - решение проблемы! Мелкий отдельное спасибо за запрос ! Долго же я переживал за нагрузку!
JustUserR
Отправлено: 09 Октября, 2010 - 21:45:55
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
ginec пишет:
Скрипт ведь должен запуститься. Я же не буду открывать его каждый час сам, тем более если будет важен каждый час.
В случае если разрабатываемый вами служебный PHP-скрипт подразумевает выполнение действий - связанных с обслуживанием сайта проводимым относительно имеющейся нагрузки и включающие в себя фоновую или завершительную обработку информации полученной от пользователей - то применение планировщика cron является неэффективным решением Дело в том что число требуемых операций явно зависит от конкретной нагрузки web-ресурса - и следовательно выбранный вами статический интервал запуска служебного процесса не адаптирован по отношению к реальным условиями - и в случае если инкрементация роста ресурсоемкости PHP-скрипта осуществляется относительно требуемого пакета обрабатываемой информации - то (D)DoS-атака произведенная на ваши ресурсы с учетом требуемых операций для формирования списка планирования - приведет к возможному сбою в работе PHP-скрипта без его автоматического последующего восстановленя - при практической реаолизации возникновение такой схемы возможно в силу отсутствия отмизиации PHP-скриптов
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.