Ограничения и время ожидания, как Rapidshare - PullRequest
1 голос
/ 27 октября 2009

У меня открытая среда, нет логинов, где можно скачать несколько файлов. Сейчас я пытаюсь настроить функцию времени ожидания и ограничение пропускной способности для каждого посетителя за период времени (как в Rapidshare, если вы когда-либо использовали их ранее).

Есть идеи, как мне это осуществить? Я нахожусь на PHP, поэтому все его ограничения / преимущества (если таковые имеются в этом случае) применяются.

Спасибо всем.

Ответы [ 3 ]

5 голосов
/ 27 октября 2009

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

function Doo_Download($path, $speed = null)
{
    if (is_file($path) === true)
    {
        set_time_limit(0);

        while (ob_get_level() > 0)
        {
            ob_end_clean();
        }

        $size = sprintf('%u', filesize($path));
        $speed = (is_null($speed) === true) ? $size : intval($speed) * 1024;

        header('Expires: 0');
        header('Pragma: public');
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Type: application/octet-stream');
        header('Content-Length: ' . $size);
        header('Content-Disposition: attachment; filename="' . basename($path) . '"');
        header('Content-Transfer-Encoding: binary');

        for ($i = 0; $i <= $size; $i = $i + $speed)
        {
            echo file_get_contents($path, false, null, $i, $speed);

            flush();
            sleep(1);
        }

        exit();
    }

    return false;
}
4 голосов
/ 27 октября 2009

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

Самый простой способ реализовать это - записать время, когда IP-адрес начинает загрузку, либо в формате простого файла, либо в базе данных. Если время, прошедшее с предыдущего времени загрузки, меньше необходимого времени ожидания, перенаправьте пользователя на страницу с ошибкой. В противном случае перенаправьте пользователя на ссылку для скачивания.

Изящный счетчик - это просто уловка Javascript. Вы можете легко написать один, используя таймеры Javascript, но это только для галочки. Фактическая возможность загрузки всегда должна определяться на стороне сервера (в вашем случае на PHP).

1 голос
/ 27 октября 2009

Попробуйте спать в файле downloader.php ...

http://php.net/manual/en/function.sleep.php (установить заголовки перед установкой тайм-аута ... тип файла)

Это заставит страницу ждать ... и на странице, которая ссылается на страницу загрузки, вы можете поместить своего рода счетчик javascript, чтобы пользователь знал ... она должна продолжаться, пока страница загрузки работает или вы можете поместить файл загрузчика в новую страницу / окно, которое автоматически преобразуется в загруженный файл (тип файла x-octet-stream ... http://www.vbulletin.com/forum/showthread.php?70959-HTTP-Headers-to-force-file-to-download-rather-than-auto-open&s=f54c68f056a4c7f13762e43bcfe44fdc)

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

...