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 :: Ограничение на выполнение скрипта

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Shadow999
Отправлено: 03 Февраля, 2011 - 18:22:31
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Здравствуйте, Уважаемые коллеги.

Возникла проблема... Хочу сделать, чтобы некий скрипт можно было бы выполнять пользователю, скажем, 1 раз в 5 минут. В общем-то скрипт является формой, которая заносит данные в базу. Инпуты заранее содержат данные, поэтому можно бесконечно долго нажимать на кнопку сохранить/изменить.

Пробовал решить проблемы с помощью кук, но вызвать их посреди документа я не могу. Да и структура слишком сложная(smarty + include + сессии + много-много файлов), чтобы пытаться создать куку до вывода информации в браузер. Есть ли у кого-нибудь идеи?

Заранее огромное спасибо..

(Отредактировано автором: 03 Февраля, 2011 - 18:23:34)

 
 Top
annihilus
Отправлено: 03 Февраля, 2011 - 18:30:45
Post Id



Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Нояб. 2009  


Помог: 0 раз(а)




Сохранять где то время, когда пользователь последний раз добавлял либо редактировал данные и проверять прошло ли 5 минут при следующем запросе...

(Отредактировано автором: 03 Февраля, 2011 - 18:32:16)

 
 Top
Shadow999
Отправлено: 03 Февраля, 2011 - 18:41:49
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Ну пользователей много. Около 12 000.. Если каждый начнет сохранять своё время, например, в файл, то будут сбои, связанные с одновременным открытием. Если сохранять в БД, то получится куча новых запросов.

Ведь этого я как раз и пытаюсь избежать. То есть если раньше, для изменения данных надо было заполнить все поля и отправить на обработку, после неё уже открывалась БД, выбиралась таблица, заносились данные. Я же хочу сделать так, чтобы для пользователя вообще не были доступны формы в течение 5 минут. Ну а в идеале еще писалось бы оставшееся время. Улыбка
 
 Top
TM123
Отправлено: 03 Февраля, 2011 - 19:04:03
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2010  
Откуда: Москва


Помог: 0 раз(а)




1. делаете таблицу с одной записью где стоит время когда форма станет доступна, это значение закэшируется в базе и будет пулей возвращаться.
2. Перед выводом формы проверяете время и говорите облом или форму
3. Перед сохранением формы проверяете время и либо говорите облом, либо сохраняете, только во время облома надо форму отдавать пользователю, иначе человек колотивший форму и потерявший все проклянет вас. Выполненные здесь операции по insert/update не кэшируются, занимают много времени и на них как вы и хотели сэкономите время.

На куках вы эту проблему кардинально не решите, куки можно подменить, бд хацкоустойчева как скала!

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

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

Ну и юморной способ из области борьбы с подбором паролей, перед сохранением формы поставить sleep на 5 минут и выводить бегунок времени, до сохранения формы осталось 4 минуты 17 секунд Улыбка


-----
Программим потихоньку http://www[dot]altycon[dot]ru
 
 Top
DiosPA
Отправлено: 03 Февраля, 2011 - 19:27:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 180
Дата рег-ции: Янв. 2011  
Откуда: Россия


Помог: 2 раз(а)




а сессии тут разве не подойдут?
 
 Top
Мелкий Супермодератор
Отправлено: 03 Февраля, 2011 - 19:29:34
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Shadow999 пишет:
Ну пользователей много. Около 12 000.. Если каждый начнет сохранять своё время, например, в файл, то будут сбои, связанные с одновременным открытием. Если сохранять в БД, то получится куча новых запросов.

Так у вас по вашим словам и так используются сессии - туда и пишите.


-----
PostgreSQL DBA
 
 Top
Shadow999
Отправлено: 03 Февраля, 2011 - 19:34:15
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




TM123 пишет:
Можно решить проблему проверкой поменял ли пользователь хоть что-то в форме и если ничего не поменял нажав на submit, послать в лес - это самый простой и думаю правильный способ...


Да, да... Я сначала так и хотел сделать, но подумал, что как-то не этично, что ли. Радость Ведь можно просто изменить одну циферку и готово.. Наверно я так и сделаю.

TM123 пишет:
зачем вам форма в которой автоматически сгенеренные данные, вы их и так могли сразу кинуть в базу без выдачи пользователю.


Просто форма - это по сути редактор профиля.

Имя: |
Возраст: |

и т.д.
Если у человека нет этих данных, то поля пустые. Иначе, все поля заполняются переменными из сессии. Не заставлять же пользователь вводить каждый раз своё имя, чтобы просто поменять аватар. Улыбка А отслеживать изменения в конкретных полях мне не хочется.

TM123 пишет:
Ну и юморной способ из области борьбы с подбором паролей, перед сохранением формы поставить sleep на 5 минут и выводить бегунок времени, до сохранения формы осталось 4 минуты 17 секунд


Ну это уже из области садизма. Радость

Ладно, спасибо огромное за идею.
(Добавление)
Мелкий пишет:
Так у вас по вашим словам и так используются сессии - туда и пишите.


Можно по-подробнее... Я знаю в куки можно вдохнуть жизнь, к примеру, на час. Можно и сессию ограничить. Я думал создай какой-нибудь влажок, который бы отвечал за то, менял ли пользователь данные. А как поменять его обратно через 5 минут? Не понял Не знаю, даже представить трудновато.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. if(isset($_SESSION['flag']) && ($_SESSION['flag'] => time())
  2. {
  3.         //
  4.         // Бла-бла.. тут функция обработки формы
  5.         //
  6.  
  7.         $_SESSION['flag'] = time() + 300; // переводим счетчик
  8. }
  9. else
  10. {
  11.         $_SESSION['flag'] = time() + 300;
  12.         echo "Ждем..";
  13. }


Вот набросал код.. Проверь, к огромному сожалению, я не могу!. Просто чтоб вы подтвердили правильность моей мысли.

(Отредактировано автором: 03 Февраля, 2011 - 20:20:37)

 
 Top
TM123
Отправлено: 03 Февраля, 2011 - 20:22:57
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2010  
Откуда: Москва


Помог: 0 раз(а)




У вас проблема в снятии нагрузки или в получении данных, ну поменял одну цифру и ткнул submit, на это надо на много больше времени чем на просто нажать submit, можно принять форму и обнаружив отсутствие изменений просто не сохранять в базу, а отдать ее же, вот и разгрузка базы.

Изменение данных и наличие данных это не одно и тоже, в форме 10 полей, писать в базу при изменении хотя бы одного, тогда не будет требоваться заполнение не заполненных полей.


-----
Программим потихоньку http://www[dot]altycon[dot]ru
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB