Вы должны сделать это в JavaScript.Клиент вообще не может запустить PHP, и ваша попытка пропинговать клиента не будет работать, когда его брандмауэр блокирует запросы извне (что часто имеет место).
Создайте функцию "ping" в JS, которая выбираетстраницу несколько раз от AJAX.Этот пример построен на платформе jQuery:
Веб-страница / JS
<script src="jquery-1.4.2.min.js"></script>
<script>
var global_runs = 0;
function ping(data) {
var op = "";
if(global_runs == 0) {
op = "start";
}else if(global_runs == 3){
op = "end";
}else if(global_runs > 3) {
return;
}
global_runs++;
$.post("ping.php", {op: op}, ping);
if(data != null) {
$("#time").text(data + " MS");
}
}
$(document).ready(function(){
//Start pinging
ping();
});
</script>
<p id="time">Time will be here</p>
ping.php
<?php
session_start();
if($_POST['op'] == 'start' || !isset($_SESSION['start'])) {
$_SESSION['start'] = microtime(true);
$_SESSION['runs'] = 0;
}else{
$_SESSION['runs']++;
$now = microtime(true);
$time = $now - $_SESSION['start'];
echo ($time / $_SESSION['runs']) * 1000; //milliseconds
}
?>
Я не использую здесь опцию end
, но она может быть использована, чтобы позволить серверу теперь, когда это последний пинг-запрос.Обратите внимание, что этот код доверяет клиенту, а это означает, что вам может потребоваться дополнительная работа по обеспечению безопасности на стороне сервера (может быть, убрать понятие «ops» со стороны сервера и просто отправить пинг?).Кроме того, вам, вероятно, нужны разные счетчики для каждой страницы, возможно, идентифицированные по некоторому токену, который вы возвращаете в первом запросе.
Также обратите внимание, что это зависит также от задержки HTTP и ЦП, а не только от сети, ноЯ думаю, что это так хорошо, как вы можете это получить.