Время загрузки PHP неверно - PullRequest
0 голосов
/ 31 марта 2012

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

Я рассчитал 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() дважды, один раз, когда файл вызывается впервые, и один раз, когда он заканчивается.

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

...