Bloquer la fenêtre de téléchargement

Fermé
apocal33 - 19 juil. 2010 à 22:18
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 19 juil. 2010 à 23:02
Bonjour,
je voulais savoir si il été possible de bloquer la fenêtre de téléchargement?
je m'explique :
je veut laisser des fichier en téléchargement dans un fichier, et que les utilisateur puisse choisir tout et n'importe quelle fichier avec
<form action="cible_envoi.php" method="post" enctype="multipart/form-data">
<p>
Formulaire d'envoi de fichier :<br />
<input type="file" name="monfichier" /><br />
<input type="submit" value="Envoyer le fichier" />
</p>
</form>
et le problème c'est que les gens on accès a tout les autre fichier.
Dons est ce que sa serait possible de donner l'accès a seulement 1 dossier.
merci d'avance


A voir également:

1 réponse

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
19 juil. 2010 à 22:24
Salut.

Voilà deux solutions :

- Tu peux créer un dossier pour chaque utilisateur et le protéger avec une identifcation HTTP (.htaccess et .htpasswd) où chaque utilisateur a son compte (et il n'y a qu'un compte par dossier).

- Tu peux interdire l'accès au dossier par HTTP (avec un .htaccess contenant « Deny from all ») et créer un script de téléchargement en PHP qui se charge de vérifier si l'utilisateur est bien le propriétaire (il te faudra une base de données).
0
merci pour ta réponse avion-f16 !
je veut bien le détaille pour la solution 2 ^^ si c possible
merci
0
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
19 juil. 2010 à 23:02
Lors de l'envoie du fichier, afin d'éviter les doublons, renommes le fichier en un nom généré aléatoirement :
$nom = uniqid(md5($_SERVER['REQUEST_TIME'])).$extension;

Stocke les fichiers dans le dossier "fichiers".
Dans ce dossier, crées un .htaccess contenant ceci :
Deny from all

Crées un fichier "telecharger.php" contenant ceci (minimum) :
<?php
session_start();
define('DB_HOST','localhost');
define('DB_USER','root');
define('DB_PASS','');
define('DB_NAME','nom_de_la_base');
define('DB_DRIVER','mysql');

if(isset($_SESSION['member_id'])) {
	$pdo = new PDO(DB_DRIVER.':host='.DB_HOST.';dbname='.DB_NAME, DB_USER, DB_PASS);
	$sql = 'SELECT COUNT(*) AS nb FROM fichiers WHERE user_id = '.(int) $_SESSION['id'].' AND id = '.$pdo->quote($_GET['file']);
	$req = $pdo->query($sql);
	$data = $req->fetch();

	if($data['nb'] > 0) {
		header('Content-Description: File Transfer');
		header('Content-Type: application/octet-stream');
		header('Content-Disposition: attachment; filename='.basename($_GET['file']));
		header('Content-Transfer-Encoding: binary');
		header('Expires: 0');
		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
		header('Pragma: public');
		header('Content-Length: ' . filesize($_GET['file']));
		ob_clean();
		flush();
		readfile($file);
		exit;
	} else {
		header('HTTP/1.1 403 Forbidden');
		echo 'Vous n\'êtes pas autorisé à obtenir ce fichier';
	}
} else {
	header('HTTP/1.1 403 Forbidden');
	echo 'Vous n\'êtes pas autorisé à obtenir ce fichier';
}
?>
Voilà la structure minimum de la table "fichiers" :
- id : Nom de fichier généré
- user_id : Identifiant unique du membre
Tu peux ajouter d'autres données comme la date d'ajout, le type de fichier, l'id de la catégorie, ...

Lorsque tu enregistres un fichier, n'oublie pas d'insérer l'entrée :
INSERT INTO fichiers(id, user_id) VALUES($nom, $_SESSION['id'])


Sans oublier le lien :
<a href="telecharger.php?file=<?php echo $nom; ?>">Télécharger le fichier</a>
0