Régulateur passif de téléchargements en PHP

Si votre serveur héberge des documents volumineux et que votre connexion Internet n'est pas rapide, peut-être souhaitez vous interdire les transferts en journée ? Et sans toucher à l'existant en plus ?

Souvent, c'est le soir et la nuit qu'un serveur est le moins sollicité. Ce qui vous embête le jour ne vous embêtera pas la nuit.

Présentation

Dans un dossier, vous avez les dernières vidéos de la représentation théâtrale des mineurs Douaisiens. En cliquant sur les fichiers, vous souhaitez effectuer un contrôle horaire.

Exemple

Rien de plus simple avec l'URL Rewriting couplé à du PHP. En nommant les fichiers de contrôle avec un point au début, ils ne seront pas visibles en ligne.

Exemple

Activation de l'URL Rewriting

Dans les options d'Apache, activez mod_rewrite.

LoadModule rewrite_module modules/mod_rewrite.so

Le fichier .htaccess contient le code suivant :

RewriteEngine on
RewriteRule ^([a-z0-9-_]+)\.(wmv|avi|mpg|mpeg)$ .regulateur.php?fichier=$1.$2 [L]

La vérification sous-entend que les fichiers soient nommés très simplement.

Contrôle de téléchargement

Le fichier .htaccess envoie les requètes du serveur vers le script suivant qui sera chargé d'autoriser ou non le transfert.

<?php
    $Heure = (int) date('H');
    $Fichier = (isset($_GET['fichier']) ? $_GET['fichier'] : '');

    if (preg_match('/^[a-z0-9-_]+\.[a-z0-9]+$/i', $Fichier))
        if (($Heure<=6) || ($Heure>=22))
            if (file_exists($Fichier))
            {
                header('Content-disposition: attachment; filename='.$Fichier);
                readfile($Fichier);
            }
?>

Copiez les deux fichiers partout où vous souhaitez gérer vos dossiers.

Le code peut être amélioré en retournant un type MIME précis via Content-Type, plutôt que de se contenter d'un Content-Disposition générique.

Tel quel, le preg_match interdit que d'autres fichiers autres que les vidéos ne puissent être téléchargés. Il n'y a pas d'injection par URL possible.

Avez-vous trouvé l'information que vous cherchiez ? Votre retour d'expérience sur le site nous intéresse.

Dernière modification le 2 septembre 2012 à 11:40