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.
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.
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.
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.
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.
Dernière modification le 2 septembre 2012 à 11:40