Я создал скрипт загрузки, который записывает время, когда пользователь начал загрузку, а затем снова, когда загрузка заканчивается, потому что я хочу иметь возможность проверить среднюю скорость загрузки по людям. По какой-то причине он не записывает время правильно.
Я рассчитал 40-Мбайт загрузку с точечными часами, что заняло около 35 секунд, но по какой-то причине сценарий сообщил, что это заняло 181 секунду.
Мой скрипт скорости (просто извлекает информацию из базы данных) выводит:
42793248 байт, загружено за (1333153897 - 1333153716 =) 181 секунду, поэтому МБ / с = 0,22547415211714 (мегабайт / время)
Я подтвердил значения байтов и секунд в моей базе данных.
Я знаю, что скрипт долго не запускается, потому что как только я открыл страницу, загрузка начинается (через секунду или 2), затем, когда загрузка закончилась, я проверил базу данных, и она уже была вставлена с этими значениями выше.
Вот наиболее подходящие части скрипта загрузки (я думаю):
<?php
set_time_limit(0);
ob_implicit_flush(true);
$_HEADERSWITCH = false;
$download_id = $_GET['id'];
$traffic = 0;
$started = time();
function headers($r, $h) {
global $_HEADERSWITCH;
if (strpos($h,"HTTP/1.1 200")!==false || strpos($h,"HTTP/1.1 206")!==false)
$_HEADERSWITCH = true;
if ($_HEADERSWITCH)
header(trim($h));
return strlen($h);
}
function bandwidth($r, $d) {
global $traffic;
$length = strlen($d);
$traffic += $length;
echo $d;
return $length;
}
function finish() {
global $started, $traffic, $download_id;
$finished = time();
$sql = "INSERT INTO `downloads`(dlid,traffic,started,finished)
VALUES ('{$download_id}', '{$traffic}','{$started}','{$finished}')";
mysql_query($sql);
}
register_shutdown_function("finish");
И фактическая загрузка потоков с сервера на клиент:
$dl = curl_init($filelink);
curl_setopt($dl, CURLOPT_HEADERFUNCTION, "headers");
curl_setopt($dl, CURLOPT_WRITEFUNCTION, "bandwidth");
curl_setopt($dl, CURLOPT_BINARYTRANSFER, true);
curl_setopt($dl, CURLOPT_FOLLOWLOCATION, true);
curl_exec($dl);
curl_close($dl);
где $filelink = location
файла, который я получаю из своей базы данных
Затем какой-то код использует cURL для пересылки пакетов и т. Д. Пользователю во время записи трафика, используемого функцией bandwidth()
.
Прекрасно загружает файл, записывает штраф трафика и вставляет в базу данных штраф. Почему-то только время не так.
Для меня действительно нет никакого смысла в том, почему он записывает неправильное время, поскольку я просто вызываю функцию time()
дважды, один раз, когда файл вызывается впервые, и один раз, когда он заканчивается.
Если вы считаете, что вам нужна дополнительная информация, пожалуйста, дайте мне знать.