Точность сна PHP - PullRequest
       1

Точность сна PHP

2 голосов
/ 09 января 2011

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

$timer_seconds = 1;

while(!connection_aborted()) { 
   echo "\n";
   flush();
   sleep(1);
   $timer_seconds++;
}

Иногда я обнаруживаю, что это может быть отключено на 5-10 секунд!Я предполагаю, что это нагрузка на сервер, который влияет на время ??

Могу ли я сделать это точно?

Спасибо всем за любую помощь.

Ответы [ 6 ]

5 голосов
/ 09 января 2011

Вы, вероятно, должны использовать Javascript, чтобы сделать это. Например, запросить что-либо у клиента (используя Ajax или запрос изображения) о событии unload документа.

4 голосов
/ 09 января 2011

echo и flush могут занимать время, поэтому ваш цикл спит в течение 1 секунды + время, потраченное на echo и flush.Попробуйте что-то вроде:

$begin_time = time();
$elapsed_time = 0;

while(!connection_aborted()) {
  echo "\n";
  flush();
  sleep(1);
  $elapsed_time = time() - $begin_time;
}
2 голосов
/ 09 января 2011

Используя jQuery, вы можете сделать синхронный вызов ajax onbeforeunload (я знаю, что это не точно ajax больше), чтобы сказать, как долго пользователь был на странице.дело в том, что он действительно ничего вам не говорит.То, что кто-то есть на странице, не означает, что он смотрит на страницу.То, что они смотрят на страницу очень кратко, тоже не значит, что им это не нравится.

1 голос
/ 23 января 2011

У вас есть несколько хороших инструментов (в javascript) для этого.

http://chartbeat.com

http://analytics.google.com

Вот некоторые из них используются в компаниия работаю.

0 голосов
/ 23 января 2011

как сказал @erjiang, эхо и сброс требуют времени, и после этого вы переводите сценарий в спящий режим ... поэтому, если для сброса потребовалась 1 секунда, а затем вы спите 1 секунду, то есть 2 секунды, и вы добавляете только одну!

решением было бы написать время начала и окончания, а затем найти разницу:

$start = time();

while(!connection_aborted()){ 
  echo "\n"; //probably not needed...
  flush(); //same probably not needed :)
  sleep(1); //so just a sleep to not continue the code
}

$end = time();
$diff = $end - $start;
$days=floor($diff/86400);
$hours=floor(($diff-($days*86400))/3600);
$minutes=floor(($diff-(($days*86400)+($hours*3600)))/60);
$secconds=floor(($diff-((($days*86400)+($hours*3600))+($minutes*60))));

echo "\n\n".$hours."/".$minutes."/".$secconds;

это сделает это! ;)

0 голосов
/ 09 января 2011

Нет надежного способа сделать это с сервера.

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