1. Mettre en place le système d'authentification par sessions PHP
De nombreux systèmes d'authentification par sessions PHP sont disponibles sur la toile. Utilisons par exemple le système DBProtect. Ce système est composé :
- - d'une base de donnée MYSQL d'utilisateurs;
- - d'une page index.php qui va gérer l'authentification des utilisateurs;
- - d'une page accueil.php qui donne accès aux fonctionnalité de votre site aux utilisateurs dûment identifiés par index.php;
- - d'une page admin.php qui est une interface permettant a l'administrateur d'ajouter ou de supprimer de nouveaux utilisateurs;
- - d'un fichier connexion.php qui donne les paramètres de connexion à la base de donnée des utilisateurs.
2. Restriction d'accès d'un dossier par .htaccess
Soit, un dossier (par exemple le dossier /files/ ) contenant des fichiers qui seront rendus disponibles en téléchargement uniquement aux utilisateurs authentifiés par une session PHP. Ce dossier est protégé en y insérant un fichier .htaccess dont le contenu est le suivant :
En conséquence, l'accès à ce dossier sera bloqué pour tout le monde...
3. Mettre en place un système de téléchargement par PHP des fichiers contenu dans le dossier restreint par .htaccess
Il faut maintenant permettre aux utilisateurs authentifiés par une session PHP de télécharger les fichiers du dossier /files/ dont l'accès est restreint par .htaccess. Cela peut s'envisager à l'aide d'un script PHP (download.php) qui va envoyer le contenu du fichier souhaité vers la sortie standard en utilisant la fonction fpassthru(). Pour ce faire, nous pouvons par exemple utiliser le code proposé sur le site Internet de Sebastian Sulinski :
Soit le script download.php contenant le code suivant :
<?php
// block any attempt to the filesystem
if (isset($_GET['file']) && basename($_GET['file']) == $_GET['file']) {
$filename = $_GET['file'];
}
else {
$filename = NULL;
}
// define error message $err = '<p style="color:#990000">Sorry, the file you are requesting is unavailable.</p>';
if (!$filename) {
echo "une erreur";
// if variable $filename is NULL or false display the message
echo $err;
} else {
// define the path to your download folder plus assign the file name
$path = 'files/'.$filename;
// check that file exists and is readable
if (file_exists($path) && is_readable($path)) {
// get the file size and send the http headers
$size = filesize($path);
header('Content-Type: application/octet-stream');
header('Content-Length: '.$size);
header('Content-Disposition: attachment; filename='.$filename);
header('Content-Transfer-Encoding: binary');
// open the file in binary read-only mode
// display the error messages if the file can´t be opened
$file = @ fopen($path, 'rb');
if ($file) {
// stream the file and exit the script when complete
fpassthru($file);
exit;
} else {
echo $err;
}
} else {
echo $err;
}
}
?>
4. Permettre aux utilisateurs authentifiés par une session PHP de télécharger un fichier protégé par .htaccess
Il suffit pour cela d'insérer un lien vers le fichier souhaité dans la page d'accueil de l'utilisateur authentifié accueil.php :
<a href="download.php?file=fichier1.pdf">Télécharger fichier1.pdf</a>
5. Conclusion
Avec cette système, il est maintenant possible d'ouvrir un session PHP et de s'en servir pour accéder à des pages se trouvant dans un répertoire protégé par un fichier .htaccess