Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

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 ...

Lassé par la pub ? Créez un compte

Non tu peux servir un stream directement ... (donc ton archive)

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


source: http://dev.mobi/node/503#comment-2344 :) 

autre exemple pour du png en explication de fpassthru ==> http://www.manuelphp.com/php/function.fpassthru.php

En effet ça marche nickel !!

Pour info j'ai ajouter deux lignes:

  1. $reqfile = "dl/video/video1.avi";
  2. $contenttype="video/avi";
  3. $filename="video1.avi"; // Ici
  4. if($fn=fopen($reqfile, "rba" )){
  5. header("Content-Type: ".$contenttype);
  6. header("Content-Disposition: attachment; filename=".$filename); // Et ici
  7. header("Content-Length: ".filesize($reqfile));
  8. header("Last-Modified: " . gmdate("D, d M Y H:i:s" ) . " GMT" );
  9. header("Pragma: no-cache" );
  10. header("Expires: Mon, 26 Jul 1997 06:00:00 GMT" );
  11. header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0, post-check=0, pre-check=0" );
  12. fpassthru($fn);
  13. fclose($fn);
  14. }else{
  15. exit("error...." );
  16. }
  17. exit();


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 ?
Lassé par la pub ? Créez un compte