проверять каждый запрос, поступающий на сервер apacheweb

У меня есть странное требование, чтобы проверить разницу во времени между каждым запросом и ответом

У меня есть PHP-файл (request.php), служащий изображением в качестве ответа, поэтому я должен проверить разницу во времени между GET request.php и GET image request. для каждого запроса.

Например:

время request.php сделано, скажем, 0:40 утра

это ответит на изображение, когда изображение вставлено в веб-страницу, я получаю запрос изображения, скажем, 12.42 утра.

поэтому мое требование — вычислять разницу во времени между request.php и изображением каждый раз, когда они попадают на мой сервер.

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

Моя идея состоит в том, чтобы прочитать Apache-log, и есть ли способ, которым мы можем написать php-скрипт, который будет работать для каждого входящего запроса и проверять его время, возможно, файл пользовательского журнала доступа.

Любая помощь!!

1

Решение

2: Исходя из вашего вопроса, я понял, что требование состоит в том, чтобы на самом деле получить время, когда изображение, наконец, «появляется» в браузере посетителя?

Если это так, то, ну, это может стать довольно быстрым с технической точки зрения, в зависимости от того, насколько точной должна быть информация, а также, если вы не возражаете против получения упомянутых изображений через XMLHTTpRequest — через JavaScript. Если это так, вы можете сделать все это на стороне сервера в качестве предварительного условия, дополнительно, установить заголовок пользовательского ответа, т.е.

header('x-imageID', $mysql_insert_id());

Затем прочитайте файл (‘blah.jpg’);

на стороне клиента, с XMLHTTpRequest, установленным в onload событие другой запрос к серверу с идентификатором изображения, например, с xhr.getResponseHeader('x-imageID') и текущее время в миллисекундах: new Date().getTime(),

очевидно, вам нужно будет установить некоторую информацию, чтобы различать запросы, чтобы сервер регистрировал только запросы на изображения и обновлял записи с помощью запросов «время обновления».

Надеюсь, поможет 😉

1

Другие решения

Вы должны использовать обработчик, чтобы иметь возможность подключаться к каждому запросу.
Это может быть сделано довольно легко, но вы должны также обслуживать файлы с вашего php.

Следующие фрагменты кода предполагают следующее:

  • на хост-сервере установлен типичный «стек LAMP»
  • ваш конфиг Apache «позволяет переопределять каталоги» (с .htaccess файлы)
  • ваша установка Apache имеет mod_rewrite установлен и включен
  • Apache + PHP имеет разрешение на чтение всех файлов, созданных в вашем docroot
  • ваша версия PHP не ниже 5.5 (или лучше)

На вашем сервере docroot папку, создайте эти файлы:

  • .htaccess
  • handler.php

.Htaccess
Открой .htaccess файл в вашем любимом текстовом редакторе, введите следующее и сохраните:

RewriteEngine On
RewriteCond %{REQUEST_URI} !handler.php$
RewriteRule (.*) handler.php

handler.php
Введите следующее в вашем .handler.php файл и сохранить:

<?

$over = $_SERVER['SERVER_PROTOCOL'];
$path = explode('?',$_SERVER['REQUEST_URI']);
$path = (($path == '/') ? '/home.html');
$extn = array_shift((explode('.',$path)));
$list = # array
[
'html' => 'text/html',
'css'  => 'text/css',
'png'  => 'image/png',
'js'   => 'application/javascript',
];

$type = (isset($mime[$extn]) ? $mime[$extn] : 'text/plain');

if (file_exists(".${path}"))
{
if (is_dir(".${path}") || ($path == '/.htaccess'))
{
header("${over} 403 Forbidden");
echo "path: `$path` is forbidden";
exit;
}

header("${over} 200 OK");
header("Content-Type: ${type}");
header("Content-Length: ".filesize($path));

readfile($path);
exit;
}

header("${over} 404 Not Found");
echo "path: `$path` is undefined";
exit;

?>

С каждым запросом получайте текущий microtime,

затем подайте файл (получите mime-тип файла, напишите соответствующий заголовок: «Content-type» и просто: readfile('path/to/file.mp3');

* где ‘path / to / file.mp3’, очевидно, будет:
$_SERVER['REQUEST_URI'] или какой-то маршрутизации — как вы хотите.

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

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

Я не уверен, сколько деталей требуется, пожалуйста, прокомментируйте соответственно.

4