перенаправить пользователя, затем зарегистрировать его посещение, используя php и mysql - PullRequest
3 голосов
/ 01 апреля 2009

У меня есть страница перенаправления PHP для отслеживания кликов по ссылкам. В основном это делает:

 - get url from $_GET
 - connect to database
 - create row for url, or update with 1 hit if it exists
 - redirect browser to url using Location: header

Мне было интересно, можно ли сначала отправить перенаправление клиенту, чтобы он мог продолжить свою работу, а затем регистрировать щелчок. Будет ли просто переключение вещей вокруг работы?

Ответы [ 3 ]

4 голосов
/ 01 апреля 2009

Вы можете сделать это:

  1. получить URL от $_GET
  2. отправить Location: заголовок
  3. звонок flush()
  4. подключиться к базе данных
  5. создать строку для URL или обновить с 1 попаданием, если оно существует

Это не обязательно приведет к тому, что браузер сразу же начнет свой путь, поскольку ваше соединение все еще остается открытым, и действия браузера по этому поводу решаются, но (за исключением условий, которые приводят к неработоспособности flush()) он, по крайней мере, выведет заголовок Location: в браузер, чтобы он мог выполнить перенаправление, если пожелает.

Если этого недостаточно, я бы порекомендовал выводить данные в поминутные или посекундные файлы, которые сценарий затем выбирает для последующей обработки в базе данных. Если это недостаточно, вы можете играть с pcntl_fork(); это чрезвычайно волосатая вещь, которую нужно делать в Apache SAPI.

1 голос
/ 01 апреля 2009

Большинство баз данных позволяют вставлять запрос с задержкой, поэтому он будет обрабатываться только тогда, когда база данных простаивает. Скорее всего, вам лучше всего это делать ... до тех пор, пока данные не являются критическими (вы потеряете запрос, если mysqld умрет или память будет очищена). http://dev.mysql.com/doc/refman/5.1/en/insert-delayed.html

0 голосов
/ 02 апреля 2009

Это нормально. PHP завершит выполнение перед сбросом заголовка перенаправления на клиент. Если у вас все еще есть сомнения, попробуйте сохранить это в файл и загрузить из браузера:

<?php
header('location: /');
sleep(2);
?>

Перенаправление не должно происходить в течение 2 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...