gestion de téléchargement de fichiers

gestion de téléchargement de fichiers - PHP - Programmation

Marsh Posté le 30-11-2005 à 15:59:23    

J'ai mis en place sur mon site un accès login / pass pour les membres de mon site, cela leur donne l'accès au téléchargement de certains fichiers. Cependant comment procéder pour que mes fichiers ne puissent pas être téléchargés en direct! c'est a dire en tapant le nom du fichier après l'adresse de mon site? Je précise que j'avais mis un accès login / Pass htaccess mais je trouve son utilisation pour ça pas du tout conviviale! Donc j'ai mis un accès php plus sympathique. Merci de votre aide pour la protection de mes fichiers..

Reply

Marsh Posté le 30-11-2005 à 15:59:23   

Reply

Marsh Posté le 30-11-2005 à 16:00:12    

Tu passes par un script pour envoyer les fichiers, au lieu de donner directement le lien vers le fichier [:spamafote]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 30-11-2005 à 17:44:51    

ahah, bonne idée en effet. Déjà je vois pas comment procéder. Mais un lien direct du style: http://monsite.fr/jacj.zip y conduit! Donc potentiellement si le mec tape l'adresse il récupère le fichier non? Merci de ton aide.

Reply

Marsh Posté le 30-11-2005 à 18:05:54    

bensti a écrit :

ahah, bonne idée en effet. Déjà je vois pas comment procéder. Mais un lien direct du style: http://monsite.fr/jacj.zip y conduit! Donc potentiellement si le mec tape l'adresse il récupère le fichier non? Merci de ton aide.


Mettre un htaccess dans le dossier contenant les fichiers a proteger, avec deny from all
Et tu as une page qui gere les autorisations genre  
dl.php?user=dupond&fichier=toto.zip
et en fonction de tes choix d'autorisations, soit

Code :
  1. if($isOK) header("Location: page_erreur.php?reason=desole_pas_le_droit" );
  2. else {
  3. header("Content-type: mettre_le_type_du_fichier); //ou forcer le DL eventuellement
  4. echo file_get_contents("toto.zip" );
  5. }


 
Je fais ca pr les photos des utilisateurs, ca marche bien...
Maintenant si les fichiers sont tres gros, c peut etre pas ce qu'il y a de mieux !!!! En tt cas c simple et sur !!
 :hello:  


---------------
ZZZZzzzzz
Reply

Marsh Posté le 30-11-2005 à 18:13:03    

echo readfile, comme ça ça envoie directement vers la sortie (le client quoi) sans passer par une mise en mémoire de variable.

Reply

Marsh Posté le 30-11-2005 à 18:23:42    

The-Shadow a écrit :

echo readfile, comme ça ça envoie directement vers la sortie (le client quoi) sans passer par une mise en mémoire de variable.


Good good  :jap:  
Je viens de tester, resultat similaire... mais si c plus rapide, tant mieux.
 
Readfile c bien, mangez en  :)


---------------
ZZZZzzzzz
Reply

Marsh Posté le 30-11-2005 à 18:28:58    

Pour rendre à César ce qui est à César, c'est FlorentG qui m'avait fait découvrir ce petit truc.
http://www.nexen.net/docs/php/anno [...] adfile.php
 
En fait, readfile et file_get_contents, c'est la même fonction sauf que readfile envoie directement sur la sortie standard (navigateur ou écran) alors que file_get_contents stocke dans une chaine puis renvoie avec ton echo.
D'ailleurs, en fait, avec readfile, le echo n'est même pas nécessaire.

Reply

Marsh Posté le 01-12-2005 à 10:31:12    

merci pour votre aide! j'essaie ça dès que possible. je vous tiens au courant pour la fermeture du topic!

Reply

Marsh Posté le 01-12-2005 à 10:59:09    

Ne jamais faire "echo readfile".
Soit on fait un echo de variable ou de retour de fonction soit on envoie directement le contenu dans le navigateur sans rien rajouter (utilisation de readfile) mais on ne fait pas un mauvais mélange des deux.
 
Un "echo readfile" risque de rajouter (j'en suis presque certain mais j'ai jamais pris le risque de tester) la taille du fichier à la fin de l'envoie du contenu du fichier. Il me semble que c'est pas ce qu'est voulut.

Reply

Marsh Posté le 01-12-2005 à 15:18:32    

dcvlm a écrit :

Mettre un htaccess dans le dossier contenant les fichiers a proteger, avec deny from all
Et tu as une page qui gere les autorisations genre  
dl.php?user=dupond&fichier=toto.zip
et en fonction de tes choix d'autorisations, soit

Code :
  1. if($isOK) header("Location: page_erreur.php?reason=desole_pas_le_droit" );
  2. else {
  3. header("Content-type: mettre_le_type_du_fichier); //ou forcer le DL eventuellement
  4. echo file_get_contents("toto.zip" );
  5. }




 
Merci de cette proposition. Cependant, cette formule me renvoie sur le téléchargement de dl.php. La page ou il y a le code. il télécharge le fichier que je veux ya pas de soucis. mais par contre l'extension est php et en plus c'est le nom de la page du script. Je n'arrive de plus pas a utiliser le:
header("Content-type: mettre_le_type_du_fichier);
Merci de votre aide

Reply

Marsh Posté le 01-12-2005 à 15:18:32   

Reply

Marsh Posté le 01-12-2005 à 15:41:22    

bensti a écrit :

Merci de cette proposition. Cependant, cette formule me renvoie sur le téléchargement de dl.php. La page ou il y a le code. il télécharge le fichier que je veux ya pas de soucis. mais par contre l'extension est php et en plus c'est le nom de la page du script. Je n'arrive de plus pas a utiliser le:
header("Content-type: mettre_le_type_du_fichier);
Merci de votre aide


C'est justement les headers HTML qui permettent de definir tout ca  
http://ie2.php.net/manual/en/function.header.php
Je te copie colle ce qu'il te faut exactement :

Code :
  1. <?php
  2. // We'll be outputting a PDF
  3. header('Content-type: application/pdf');
  4. // It will be called downloaded.pdf
  5. header('Content-Disposition: attachment; filename="downloaded.pdf"');
  6. // The PDF source is in original.pdf
  7. readfile('original.pdf');
  8. ?>


J'avais eu la flemme de chercher la premiere fois....   :) :D Toi aussi  :D


---------------
ZZZZzzzzz
Reply

Marsh Posté le 01-12-2005 à 17:05:41    

merci à toi! en effet j'avais trouvé par moi meme la ligne:  
header('Content-Disposition: attachment; filename="downloaded.pdf"');
 
mais je ne voyais pas son utilité!

Reply

Marsh Posté le 01-12-2005 à 17:54:54    

voici pour les autre mon script:
 $iddl = mon fichier //GET quelque chose ou URL directe. Attention pas de lecture de SQL avant header!
 $iddl2= str_replace(" ", "_", $iddl); // ça fait pas de mal header supporte mal les espaces
 header('Content-type: application/wav');
 header('Content-Disposition: attachment; filename='.$iddl2);
 readfile("mesfichiers/$iddl" );

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed