Limitation d'accès à un téléchargement

WRInaute occasionnel
Bonjour,

Comment limiter l'accès au téléchargement d'un fichier qu'aux personnes qui seraient par exemple inscrites sur mon forum (PHPBB). Sachant que le chemin de ce fichier (zip) est facilement repérable a postériori.

Merci de me m'éclairer de vos conseils
 
WRInaute passionné
boby> Ca réponds pas forcément à son soucis.
Les liens pour les zips sont où?

Tu veux que seuls les membres autentifié puisse télécharger le zip ou juste puisse voir les liens?

Pour le second cas je suppose que c'est pas ce que tu veux vu qu'il suffirait de mettre les liens dans une section réservé au membre du forum.
Pour la seconde il faut faire un script PHP qui regarde si tu es connecté, si oui qui te "sert" le fichier.
 
WRInaute occasionnel
Bacteries a dit:
boby> Ca réponds pas forcément à son soucis.
Les liens pour les zips sont où?

Tu veux que seuls les membres autentifié puisse télécharger le zip ou juste puisse voir les liens?

Pour le second cas je suppose que c'est pas ce que tu veux vu qu'il suffirait de mettre les liens dans une section réservé au membre du forum.
Pour la seconde il faut faire un script PHP qui regarde si tu es connecté, si oui qui te "sert" le fichier.

Oui c'est bien le premier cas. Mais le soucis c'est que je sais si l'utilisateur est connecté ou pas mais comment lui interdire l'accès au fichier à télécharger (en l'occurence ici un fichier zip) si celui-ci n'est pas connecté mais connait l'adresse directe qui donne accès au fichier.
 
WRInaute occasionnel
Eh bien, j'ai trouvé une solution très satisfaisante en partant d'un script PHP qui permet le téléchargement d'un fichier de la manière suivante :

Code:
		$file = "nom_du_fichier.zip";
		
		if(file_exists($file) && is_file($file))
		{
			header("Cache-control: private");
			header("Content-Type: application/octet-stream");
			header("Content-Length: ".filesize($file));
			header("Content-Disposition: filename=$file");
			flush();
			$fd = fopen($file, "r");
			echo fread($fd, filesize($file));
			fclose ($fd);
		}

Ensuite mettre autour la tripaille PHPBB ça donne le fichier que j'appelle download.php :
Code:
<?php
	define('IN_PHPBB', true);
	$phpbb_root_path = '../forum/';
	include($phpbb_root_path . 'extension.inc');
	include($phpbb_root_path . 'common.'.$phpEx);

	// 
	// Start session management 
	// 
	$userdata = session_pagestart($user_ip, ACCUEIL); 
	init_userprefs($userdata); 
	// 
	// End session management 
	//

	if ( !$userdata['session_logged_in'] )
	{
		redirect(append_sid("login.".$phpEx."?redirect=download.php", true));
	}
	else
	{
		$file = "nom_du_fichier.zip";
		
		if(file_exists($file) && is_file($file))
		{
			header("Cache-control: private");
			header("Content-Type: application/octet-stream");
			header("Content-Length: ".filesize($file));
			header("Content-Disposition: filename=$file");
			flush();
			$fd = fopen($file, "r");
			echo fread($fd, filesize($file));
			fclose ($fd);
		}
	}
?>

Quand cette page php est appelé par un lien par exemple, si l'utilisateur n'est pas connecté, il est redirigé sur la page de login de PHPBB et une fois connectée reçoit directement le fichier en téléchargement (c'est peut-être à modifier ça !).
Pour finir je protège par un .htaccess le répertoire qui contient le fichier à télécharger.

On peut aussi faire la même chose avec un PDF qu'on a placé dans un répertoire protégé. On change l'extension du fichier et on remplace :

Code:
header("Content-Type: application/octet-stream");

par

Code:
header("Content-type: application/pdf");

Voilà, ça f'ra 10 francs !
 
Discussions similaires
Haut