Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/55: Рейтинг темы: голосов - 55, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 77

Php выполнение скрипта каждую секунду

06.10.2015, 20:06. Показов 11535. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста, как можно решить задачу:
делаю интернет аукцион и после ставки таймер на завершение лота ставится на 20 секунд (т.е в mysql есть поле с датой окончания), как мне проверять прошли ли эти 20 секунд? + за 3-4 секунды до окончания должны выполняться еше действия

сначала хотел через cron, но там минимальный вызов скрипта раз в 2 минуты...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2015, 20:06
Ответы с готовыми решениями:

Работа скрипта каждую секунду
Вот собственно и вопрос, как мне сделать запуск скрипта каждую секунду. Просто на кроне это возможно лишь раз в минуту, облазил весть...

Запуск скрипта каждую секунду (cronjob)
Довольно давно есть у меня скрипт, который нужно запускать каждую секунду. Я, конечно, гуглил, но мне так и не удалось правильно...

Выполнение PHP скрипта
Через форму задаю параметры для PHP скрипта, тыкаю submit, скрипт выполняется около 10-ти секунд, а по окончанию работы выводит результат...

9
775 / 444 / 93
Регистрация: 24.10.2012
Сообщений: 3,240
Записей в блоге: 5
06.10.2015, 20:34
Может быть с помощью, вот этого:

jquery.page2page.ru/index.php5/Ajax-запрос

javascript.ru/setInterval

Создаете циклически ajax запросы на обработчик через каждые 20 сек. Затем в обработчике, на всякий случай, проверяете интервал прошедшего времени что бы оно было где то 20 сек.
0
0 / 0 / 0
Регистрация: 19.08.2014
Сообщений: 77
06.10.2015, 21:18  [ТС]
Это должно происходить на сервере
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
06.10.2015, 21:39
Цитата Сообщение от MrMens2 Посмотреть сообщение
как мне проверять прошли ли эти 20 секунд?
в пхп -- только постфактум вы можете это гарантировать (всегда есть шанс банально что канал у хостера отрубится как раз в эти 20 секунд, или сервер упадет).
если серьезно все с деньгами связано, купите себе впс-ку, хотяб за 5 баксов в мес, и используйте либо другие технологии, которые постоянно в памяти находятся (nodejs/python/java/erlang/c++/pascal/rust/что угодно/phpDaemon) либо там сами сможете запилить свой крон с секундомером и завершательницами лотов
0
2 / 2 / 1
Регистрация: 24.05.2015
Сообщений: 24
07.10.2015, 05:00
$.post (это jquery) или $.ajax
0
Заблокирован
07.10.2015, 09:31
MrMens2, посмотрите Long-Polling, и хотя там запуск процесса будет ajax-ом, но затем сервер будет крутится сам пока не выйдет время или не придет следующая команда от пользователя. вроде то что вам нужно..

Добавлено через 2 минуты
еще можно из скрипта через curl отправлять запрос самому себе. тоже буде крутится бесконечно..
1
420 / 357 / 47
Регистрация: 22.05.2013
Сообщений: 2,518
07.10.2015, 09:58
Цитата Сообщение от a-fw Посмотреть сообщение
посмотрите Long-Polling,
Цитата Сообщение от MrMens2 Посмотреть сообщение
сначала хотел через cron, но там минимальный вызов скрипта раз в 2 минуты...
Теоретически для подобных вещей обычно сервер запускают а не на PHP балуются. Например на Jave. На PHP это делать... не принято!
Когда-то читал что на php можно даже сокет-сервер сделать... Надежность слабая. Скорость явно ниже явы (отзывы тех кто добивался этого).
Можешь поискать ту технологию! Там теоретически надо лишь "запустить" сервис. И перезапускать если он дохнет. Перезапускать может любая другая страница (юзер прегрузил/загрузил страницу) или кроном.

если не секрет - ЧТО должен делать скрипт через 20 минут после вызова? Может там можно другой логической хитростью "обойти"?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
07.10.2015, 13:31
Цитата Сообщение от a-fw Посмотреть сообщение
еще можно из скрипта через curl отправлять запрос самому себе
в этом нет никакого смысла. тогда уж юзайте set_time_limit(0) . Но я еще раз повторяю, обычный пхп (без Daemon или чего-то такого) не предназначен для подобного рода вещей
0
Заблокирован
07.10.2015, 13:45
Цитата Сообщение от NEbO Посмотреть сообщение
тогда уж юзайте set_time_limit(0)
это если хостер раздолбай и всё всем подряд разрешает
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
07.10.2015, 18:27
формально, хостеру по-барабану сколько у вас скрипт будет работать. ему главное, чтоб у остальных пользователей ресурсы не отнимались. единственное, что мешает (в плане "чистого" пхп) установить set_time_limit(0) -- это safe_mode. но если он установлен, я бы советовал бежать от таких хостеров, даже если они бесплатные.
ну и да, открою еще один секрет. если поставить sleep(20) под *nix системами они не защитаются за execution time у скрипта (проверял лично). под виндой засчитаются (тоже проверял лично). поэтому спите сколько душе будет угодно. есть еще и usleep, если вам не 20 секунд нужна задержка, а, скажем, 20 миллисекунд.

Но! еще раз повторяю, не делайте так! Хотя никто не спросил, почему, отвечу на еще не заданный вопрос: теоретически все возможно, но на практике при реализации вы рано или поздно столкнетесь с рейсами. В пхп хотя и есть некоторые способы их избежать, но их никто не юзает, и они толком не тестировались, в сети вы готовых решений не найдете. Для бизнес-проекта это особенно критично, потому что не учтя их, у вас на сайте один и тот же товар дважды будет продаваться, либо наоборот, улетит в никуда, и вы долго не будете понимать, в чем дело.
И это только первая проблема, с которой придется столкнуться. Вторая заключается в блокировке пхп-шных процессов, если их внезапно(!) начнет возникать очень много, внутри системы, и рано или поздно начнут сыпаться 500-ые ошибки (504, 502 или 503я, как правило, в зависимости от веб-сервера, пхп-бекенда и их настроек).
Третья -- пхп падок на утечки памяти, если допустите минимальную ошибку в основном цикле, будет все очень грустно. придется вручную запускать GC, а еще лучше -- программировать в стиле си/си++ : unset-ить вручную каждую переменную, которую вы создали. и проверять это все на утечки xdebug-ом, либо опять же, вручную.

Далее, по поводу реализации этой затеи, дам вредные советы:
  1. Запускается скрипт, с set_time_limit(0) и ignore_user_abort(true). В нем основной цикл:
    PHP
    1
    2
    3
    4
    5
    6
    7
    8
    
    <?php
    $tick_duration = 500000; // время тика, в микросекундах
    while (true) {
      $start_time = microtime(true);
      payload(); // полезная нагрузка
      $time_rest = (int)max(0, $tick_duration - 1000000*(microtime(true) - $start_time));
      usleep($time_rest); // позволит загружать процессор не очень сильно, особенно когда ничего не поменялось 
    }
    в полезной нагрузке вам придется очень быстро сначала проверить, произошли ли какие-то изменения (события) в системе, которые нужно обработать в текущий момент. И, если они есть, обрабатывать. Обрабатывать можно дольше, но крайне желательно уложиться в $tick_duration микросекунд

    Не по теме:

    мкс не сокращаю, а то как всегда кто-нибудь неправильно поймет:)


    Это позволит грузить только один процесс и четко его контролировать. То есть избавиться от проблемы №2. Однако, это усложняет работу с проблемой №3, для ее решения...
  2. Нужен некий ipc-транспорт. Если на серваке не стоит memcached, или shm-модуль, делается это через файлы или базу. Нужно это для того, чтобы время от времени перезапускать скрипт, хотябы раз в пару часов. Потому память реально будет течь всегда, и не всегда вы можете это контролировать -- это внутренние премудрости пхп. Перезапускать процесс можно по тому вредному совету, что давали выше, с помощью curl

    Не по теме:

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

    .
  3. С рейсами все может оказаться гораздо сложнее. Очевидно, что lock-free в такой архитектуре не прокатит, нельзя допустить, чтобы два таких процесса работали одновременно, поэтому придется эмулировать мьютексы. Разумеется, расширение для поддержки семафоров я встречал на шаред-хостингах крайне редко (вернее, вообще ни разу не встречал), потому что компилить пхп среднестатистический хостер не будет, ради штуки, которая не тестировалась, и которой никто не пользуется. Поэтому в пхп (ну, вообще-то в posix, но не суть) придумали замечательную штуку под названием flock. С ее помощью можно эмулировать межпроцессные мьютексы, и она работает даже(!) под виндой.
  4. Необходима периодическая проверка существования этого процесса в памяти, тут уже можно проще: при каждом запросе проверять, снята ли блокировка с файла, заблокированного пунктом выше функцией flock. если да, то все нормуль, если нет, то надо его запустить, см. п.2

Необходимо также помнить, что, хотя сам пхп не ограничивает время процесса, некоторые хостеры зачем-то (если реально скрипт просто висит и не потребляет ресурсов, то не всегда понятно, зачем) принудительно вырубают все процессы, которые работают дольше какого-то количества времени, и это все опять же усложняет. Вероятно, тут есть вариант со своеобразной "миграцией" процесса каждые 10 секунд. Но нужно учитывать все задержки, там есть проблемы с синхронизацией времени, неизвестно сколько времени займет "миграция" и все такое...
Я уже когда-то уже пытался сделать подобное (Выполнение кода в определённое время) , даже вспомнил кучу паролей от своих старых бесплатных акков у разных хостеров, и уперся как раз таки в разные их особенности. У кого-то стоял старый curl, который работал не так, как у других, у кого-то дико маленькие ограничения по памяти или по времени, у кого-то причину частых вылетов процесса так и не удалось установить.
Но то все бесплатные хостеры. Платные более демократичные, да и можно с саппортом пообщаться, вероянее всего автору и стоит так сделать, возможно, админ сжалится и подскажет, с помощью чего вы можете добиться такого поведения на своем сайте.

В общем, до конца этот "крон" я так и не дописал, потому что понял, что проще платить по 5 баксов в месяц и отказаться от пхп в продакшене для таких задач. Даже для бесплатных проектов, про платные я вообще молчу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2015, 18:27
Помогаю со студенческими работами здесь

Выполнение скрипта PHP
Всем привет. Вот хотелось бы узнать у гуру как написал функцию. Есть ли недочёты.. и т.п.. Критика приветствуется! &lt;?php function...

Запуск php скрипта каждую минуту(например) OpenServer 5.2.2
нужно сделать запуск скрипта test.php каждую минут (каждый час, хоть как) пробовал делать так: настройки--&gt;Планировщик заданий ...

Постоянное выполнение php скрипта
Суть такова - на сервере стоит скрипт который работает так сказать постоянно (по логам смотрю что он всегда работает), вопрос - где это...

Выполнение php скрипта из cmd
Здравствуйте! Есть большой php скрипт который нужно выполнять в кроне. Настроил планировщик задач на 2008r2 и создал .bat типа: ...

Отложенное выполнение скрипта PHP
Здравствуйте, как сделать чтобы отложить выполнение скрипта на несколько секунд? Скрипт редиректинга поставил. Пишу sleep(5); . 5 секунд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru