restraindre, interdire le téléchargement en php?

  • Auteur de la discussion Navartus
  • Date de début

Navartus

Expert
Bonjour,

Déjà petite info je suis débutant en php :D

Je bloque sur comment permettre, ou ne pas permettre le téléchargement d'un fichier sur le serveur, grâce à une condition en php, par exemple si une variable de session existe ou non. (dans le cadre d'un téléchargement privé ou une protection contre le vole de BP).

Le but est de rendre complètement impossible le téléchargement directe d'un fichier (en entrant par exemple l'adresse url).

Je pense à un .htaccess mais là dessus je sèche complètement.

L'idée de base c'est interdire le téléchargement via un .htaccess mais de pouvoir passer outre avec une fonction php.

J'ai cru voir quelque part que php gére le FTP, je me trompe ?

merci d'avance ...

 

boub popsyteam

Grand Maître
Tu bloques le dl direct par .htacces et tu sers ton fichier via php ça ne pause pas de gros soucis à mon sens :)

Apres c'est + ou - compliqué selon le type de fichier et leur tailles ...
 

Navartus

Expert
Pour un texte, il y a pas de problème mais pour un fichier en zip, (contenant une vidéo) On fait comment ?
L'include d'archive, mais c'est pas la bonne idée x)
Le FTP ça marcherais ??
 

boub popsyteam

Grand Maître
Non tu peux servir un stream directement ... (donc ton archive)

ex pour servir des fichiers 3gp, a modifier pour servir du zip ou autre ;)
Code:
<?php
$reqfile = "path/to/file.3gp";
$contenttype="video/3gpp";
if($fn=fopen($reqfile, "rba")){
header("Content-Type: ".$contenttype);
header("Content-Length: ".filesize($reqfile));
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 06:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0");
fpassthru($fn);
fclose($fn);
}else{
exit("error....");
}
exit();
?>

source: :)

autre exemple pour du png en explication de fpassthru ==>
 

Navartus

Expert
En effet ça marche nickel !!

Pour info j'ai ajouter deux lignes:

[cpp]
$reqfile = "dl/video/video1.avi";
$contenttype="video/avi";
$filename="video1.avi"; // Ici
if($fn=fopen($reqfile, "rba" )){
header("Content-Type: ".$contenttype);
header("Content-Disposition: attachment; filename=".$filename); // Et ici
header("Content-Length: ".filesize($reqfile));
header("Last-Modified: " . gmdate("D, d M Y H:i:s" ) . " GMT" );
header("Pragma: no-cache" );
header("Expires: Mon, 26 Jul 1997 06:00:00 GMT" );
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0" );
fpassthru($fn);
fclose($fn);
}else{
exit("error...." );
}
exit();
[/cpp]

Afin d'avoir le nom du fichier (et surtout la bonne extension ^^)

En tout cas ...

MERCI BEAUCOUP !!


Juste une petite question à quoi servent les ligne 9, 10 et 11 ?
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 852
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut