Question

J'ai un environnement ouvert, pas de connexions, où un certain nombre de fichiers peuvent être téléchargés. J'essaie maintenant de mettre en place une fonction de temps d'attente et une limite de bande passante par visiteur par période (similaire à celle de Rapidshare si vous en avez déjà utilisé auparavant).

Avez-vous des idées sur la manière de procéder? Je suis sur PHP, donc toutes ses restrictions / avantages (s’il en existe dans ce cas) s’appliquent.

Merci à vous tous.

Était-ce utile?

La solution

Sans un système de connexion, le mieux que vous puissiez faire est de limiter le téléchargement à une adresse IP par téléchargement dans un laps de temps déterminé. Je pense que c'est ce que Rapidshare fait également.

La méthode la plus simple consiste à enregistrer l'heure à laquelle une adresse IP commence un téléchargement, dans un format de fichier à plat ou dans une base de données. Si le temps écoulé depuis le temps de téléchargement précédent est inférieur au temps d'attente requis, redirigez l'utilisateur vers une page d'erreur. Sinon, redirigez l'utilisateur vers le lien de téléchargement.

Le compteur astucieux n’est qu’un truc en Javascript. Vous pouvez facilement en écrire un en utilisant des minuteries Javascript, mais c'est juste pour le spectacle. La capacité de téléchargement réelle doit toujours être déterminée par serveride (en PHP dans votre cas).

Autres conseils

Je suis d'accord avec Kai mais une autre solution pourrait être de servir le fichier à basse vitesse, vous pouvez utiliser la fonction suivante pour le faire.

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;
}

Essayez de mettre le fichier downloader.php en veille ...

http://php.net/manual/fr/function.sleep.php (définir les en-têtes avant de définir le délai d'expiration ... le type de fichier)

Cela va forcer la page à attendre ... et sur la page qui renvoie à la page de téléchargement, vous pouvez mettre un compteur javascript pour informer l'utilisateur ... il devrait continuer à s'exécuter tant que la page de téléchargement est en cours d'exécution ou vous pouvez placer le fichier de téléchargement dans une nouvelle page / fenêtre, qui est automatiquement interprétée comme un fichier téléchargé (type de fichier x-octet-stream ... http://www.vbulletin.com/forum/showthread .php? 70959-en-têtes HTTP pour forcer le fichier à télécharger plutôt que l'ouverture automatique & amp; s = f54c68f056a4c7f13762e43bcfe44fdc )

Vous pouvez également utiliser une session pour restreindre l'accès aux pages de téléchargement dans un certain laps de temps, mais c'est plus envoûtant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top