Запускать скрипт после пользовательского события, но не влияя на загрузку страницы? - PullRequest
0 голосов
/ 14 сентября 2010

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

>-- Time -->
                        > redirect User -> User Does Stuff -> more stuff -> etc
                       /                   
User Input -> Submit ->
                       \
                        > updating stats in background -> Possibly still running

Какой лучший способ сделать это в PHP?

РЕДАКТИРОВАТЬ для Fabrik

Пользователи хотели бы видеть немедленную обратную связь, отражающую добавление их новых данных, ноэти новые данные поступают только 2 или 3 раза в день, поэтому я думаю, что работа CRON на основе интервалов может быть ненужным использованием ресурсов сервера и также не сможет удовлетворить их потребность в срочности.Надеюсь, это поможет!

Ответы [ 3 ]

1 голос
/ 14 сентября 2010

Я сделал быстрый поиск в Google для php background process , и большинство обращений предлагают использовать либо exec, либо shell_exec,Скрипт, который вы хотите запустить в фоновом режиме.

Редактировать: Эта статья представляется наиболее актуальной для вашего вопроса.

1 голос
/ 14 сентября 2010

Если вам нужен небольшой фрагмент кода, я бы выбрал что-то вроде этого:

<?php
if($new_record) {
  exec("php /path/updateStats.php ".escapeshellarg($userid)." >/dev/null &");
  your_redirect_call_etc();
}

перенаправление потока вывода и '&' приведет к выполнению вызова exec независимо от сценария.

Если вам нужно более масштабируемое решение, вы можете посмотреть что-то вроде Gearman , которое позволит вам легко / управлять этими фоновыми заданиями на другом сервере.

0 голосов
/ 14 сентября 2010

Хороший график, но:

  • Нам нужно больше знать о ваших потребностях (например, можно ли использовать cron или нам нужно отображать статистику как можно скорее?)
  • Если выможете использовать cron для установки небольшого интервала (5 минут), а затем опрашивать вашу базу данных на предмет изменений
  • Если вы не можете использовать cron, попробуйте создать свой сайт полностью с AJAX, чтобы вы могли безопасно запускать фоновые процессы
...