Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1764 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Autoriser l'accés à un fichier pendant un temps précis ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP]Autoriser l'accés à un fichier pendant un temps précis ?

n°605119
Phive
Raaah Lovely
Posté le 07-01-2004 à 20:18:05  profilanswer
 

Bonjour,
 
Je cherche à autiriser l'acces à une fichier sur mon serveur mais pendant un certain temps. Ce temps correspond au temps de téléchargement du fichier.  
En gros je voudrais que des que la personne a télécharger ce fichier, il ne puisse plus y acceder par la suite.
Genre je lui donne un accés pour telecharger un certain fichier, il le télécharge et une fois le download fini, je lui retire son accés.
 
Est ce que tout cela est possible (mettre un acces automatique a ce fichier en php et l'enlever une fois ce fichier télécharger)?
 
Marchi  :hello:


Message édité par Phive le 07-01-2004 à 20:19:23

---------------
/!\ Post powered by Phive-online.com /!\
mood
Publicité
Posté le 07-01-2004 à 20:18:05  profilanswer
 

n°605209
Tentacle
Posté le 07-01-2004 à 22:04:57  profilanswer
 

Je pense que tu pourrais passer par un script php auquel tu fournis en argument le nom du fichier. Il vérifie que l'utilisateur peut le télécharger, et il lui envoie directement le contenu avec les headers nécéssaires pour le client comprenne qu'il télécharge un fichier.

n°605994
Phive
Raaah Lovely
Posté le 08-01-2004 à 23:38:37  profilanswer
 

Merci bien pour ton idée mais j'ai encore du mal a saisir le fonctionnement de ce "script"


---------------
/!\ Post powered by Phive-online.com /!\
n°606201
Tentacle
Posté le 09-01-2004 à 10:02:53  profilanswer
 

Phive a écrit :

Merci bien pour ton idée mais j'ai encore du mal a saisir le fonctionnement de ce "script"


Heu En fait c'est une mauvaise idée car souvent PHP a une durée limitée d'exécution alors si le fichier est trop gros, l'utilisateur n'aura jamais son fichier.

n°606276
Freekill
Electron libre…
Posté le 09-01-2004 à 11:08:29  profilanswer
 

Script de redirection pour planquer l'adresse du fichier, et vérification de l'IP/ID Session ?


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
n°606306
Azzazel
Posté le 09-01-2004 à 11:49:59  profilanswer
 

> Tentacle : c'est pourtant à mon avis le seul moyen de controler le début et la fin du téléchargement.
 
Peut être en découpant le fichier en petit bout et en exécutant le script successivement sur ces petits bouts...

n°606318
Tentacle
Posté le 09-01-2004 à 12:07:26  profilanswer
 

Freekill a écrit :

Script de redirection pour planquer l'adresse du fichier, et vérification de l'IP/ID Session ?


 
Oui mais ce qui me gène dans cette technique, c'est que si le script redirige le client pour qu'il puisse telecharger le fichier ... alors il y a toujours moyen d'avoir l'adresse du fichier qu'on telecharge, et donc de renouveler le download une autre fois ... non ?
 

Citation :

> Tentacle : c'est pourtant à mon avis le seul moyen de controler le début et la fin du téléchargement.


Peut-être mais même si on découpe le fichier, on n'est pas garantie de la vitesse de download du client.
... Il y a peut-être la solution d'un copie temporaire du fichier sous un nom bizarre (style md5 pour que quelqu'un d'autre ne puisse pas trouver le fichier au pif) et laisser un temps limite pour le telechargement puis l'effacer. Problème : faut pouvoir effacer le fichier au bout de ce temps et puis c'est pas très performant de faire des copies partout :/

n°606321
Phive
Raaah Lovely
Posté le 09-01-2004 à 12:10:57  profilanswer
 

Bah en tout cas marchi bien pour ces petites idées que vous m'avez donner.
je vais tenter de réaliser cela.
 
Sinon il me semblait que php avait des fonction reseaux qui permettaient de tester les données envoyer et recu. Est ce vrai ?
 
Sinon Freekill merci pour ton idée et c'est ce que j'avais prevu de faire sauf que maintenant le probleme c'est de savoir si le fichier à bien était télécharger complétement par le user


---------------
/!\ Post powered by Phive-online.com /!\
n°606325
Freekill
Electron libre…
Posté le 09-01-2004 à 12:19:00  profilanswer
 

Tiens une idée bizarre qui me vient soudainement : ne pourrait-on pas utiliser php pour (ré)générer un .htaccess contenant les IP autorisées à télécharger le fichier ?


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
n°606331
Phive
Raaah Lovely
Posté le 09-01-2004 à 12:28:19  profilanswer
 

J'y avais penser :)
Je pense que cela est bien possible car avec php on peut creer un fichier txt par exemple et apres simple le renomer .htaccess
C'est une idée.. Je note !  
Marci :)


---------------
/!\ Post powered by Phive-online.com /!\
mood
Publicité
Posté le 09-01-2004 à 12:28:19  profilanswer
 

n°606334
Tentacle
Posté le 09-01-2004 à 12:31:37  profilanswer
 

Phive a écrit :

J'y avais penser :)
Je pense que cela est bien possible car avec php on peut creer un fichier txt par exemple et apres simple le renomer .htaccess
C'est une idée.. Je note !  
Marci :)


 
Oui mais reste le problème qu'a la fin du telechargement il faut que le fichier ne soit plus telechargeable ... or un script php ne pourra pas rester en exécution tout ce temps et il n'y a pas moyen de lancer un script au bout d'un certain temps :/
Ou peut-être compter sur une grosse fréquentation de ton site pour mettre a jour les droits mais bof

n°606345
Phive
Raaah Lovely
Posté le 09-01-2004 à 12:50:12  profilanswer
 

Tentacle a écrit :


 
Oui mais reste le problème qu'a la fin du telechargement il faut que le fichier ne soit plus telechargeable ... or un script php ne pourra pas rester en exécution tout ce temps et il n'y a pas moyen de lancer un script au bout d'un certain temps :/
Ou peut-être compter sur une grosse fréquentation de ton site pour mettre a jour les droits mais bof  


 
Oui c'est tjs le même problème.
 
Sinon tu entends koi par ta dernier phrase : changer les droits ok mais pkoi une grosse fréquentation ?


---------------
/!\ Post powered by Phive-online.com /!\
n°606350
Azzazel
Posté le 09-01-2004 à 12:58:05  profilanswer
 

une grosse fréquentation te permet de lancer fréquemment la mise à jour des droits ... c'est les utilisateurs qui génèrent une action sur ton site ...

n°606353
Phive
Raaah Lovely
Posté le 09-01-2004 à 13:00:00  profilanswer
 

ha oki  
don pour le moment je suis un peu bloker concernant le test de fin de teléchargement...
Faudrait peut etre trouver un autre systeme...


---------------
/!\ Post powered by Phive-online.com /!\
n°606391
Tentacle
Posté le 09-01-2004 à 13:19:13  profilanswer
 

Ya pas moyen de modifier localement la configuration de PHP pour enlever cette foutu limitation de temps d'éxécution ... juste pour un script de téléchargement ?

n°606411
Phive
Raaah Lovely
Posté le 09-01-2004 à 13:39:16  profilanswer
 

Bah en local je pense ke oui mais une fois sur le serveur de mon hebergeur je ne pourrais modifier ce paramettre...
donc bon :/
 
ralala je sens ke ca va etre dur...


---------------
/!\ Post powered by Phive-online.com /!\
n°606530
Azzazel
Posté le 09-01-2004 à 15:07:22  profilanswer
 

En fait si c'est possible avec ini_set()
ini_set(max_execution_time,30)
au lieu de 30 tu met un chiffre qui correspond à la durée approximative du téléchargement ou en tout cas une limite max.
 
Et ça n'impacte que le script en cours !
 
Ensuite tu peux gerer la connection de l'utilisateur avec connection_aborted() dans le script appelant. Enfin là tu as le choix de la méthode ....


Message édité par Azzazel le 09-01-2004 à 15:26:26
n°606645
Tentacle
Posté le 09-01-2004 à 17:43:00  profilanswer
 

Azzazel a écrit :

En fait si c'est possible avec ini_set()
ini_set(max_execution_time,30)
au lieu de 30 tu met un chiffre qui correspond à la durée approximative du téléchargement ou en tout cas une limite max.


 
En priant pour que la config de PHP chez l'hébergeur le permette  :sweat:

n°606659
Phive
Raaah Lovely
Posté le 09-01-2004 à 18:10:17  profilanswer
 

Oui en local cela ne posera pas de probleme mais chez mon hebergeur (OVH) je ne sais pas pas...faudrait que je demande
 
Mais encore merci bcp pour votre aide


---------------
/!\ Post powered by Phive-online.com /!\
n°607078
Tentacle
Posté le 10-01-2004 à 15:04:11  profilanswer
 

Tiens à propos du script php pour télécharger un fichier, j'ai trouvé un exemple dans les commentaires de la doc PHP sur www.php.net. Voivi le lien (commentaire du 5 janvier 2004) et voici le bout de code :
 

Code :
  1. <?
  2. $filename = $_GET['file'];
  3. $ext = substr( $filename,-3 );
  4. if( $filename == "" ) {
  5.    echo "<html><body>ERROR: Empty file to download. USE download.php?file=[file path]</body></html>";
  6.    exit;
  7. } elseif ( ! file_exists( $filename ) ) {
  8.    echo "<html><body>ERROR: File not found. USE download.php?file=[file path]</body></html>";
  9.    exit;
  10. };
  11. switch( $ext ){
  12.    case "pdf": $ctype="application/pdf";              break;
  13.    case "exe": $ctype="application/octet-stream";      break;
  14.    case "zip": $ctype="application/zip";              break;
  15.    case "doc": $ctype="application/msword";            break;
  16.    case "xls": $ctype="application/vnd.ms-excel";      break;
  17.    case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  18.    case "gif": $ctype="image/gif";                    break;
  19.    case "png": $ctype="image/png";                    break;
  20.    case "jpg": $ctype="image/jpg";                    break;
  21.    default:    $ctype="application/force-download";
  22. }
  23. header("Pragma: public" );
  24. header("Expires: 0" );
  25. header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  26. header("Content-Type: $ctype" );
  27. $user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]);
  28. if ((is_integer (strpos($user_agent, "msie" ))) && (is_integer (strpos($user_agent, "win" )))) {
  29.    header( "Content-Disposition: filename=".basename($filename).";" );
  30. } else {
  31.    header( "Content-Disposition: attachment; filename=".basename($filename).";" );
  32. }
  33. header("Content-Transfer-Encoding: binary" );
  34. header("Content-Length: ".filesize($filename));
  35. readfile("$filename" );
  36. exit();
  37. ?>


 
Comme tu vois, il faut connaître le type MIME en fonction de l'extension du fichier (doit bien y avoir un moyen de récupérer ça autrement vu que Apache le connaît ?). Ce que j'ai trouvé bien, c'est le fait de pouvoir spécifier le nom sous lequel le fichier devra être enregistré (par défaut) chez le client, c'est à dire la ligne :

Code :
  1. header( "Content-Disposition: attachment; filename=".basename($filename).";" );


Voir ici pour une description du header.  :jap:  
 
Reste à vérifier si ton hébergeur accepte le fait de pouvoir modifier localement la durée de vie d'un script.

n°607173
ethernal
Chercheur de vérité...
Posté le 10-01-2004 à 17:02:06  profilanswer
 

Tentacle > ce genre de script est bon pour se faire hacker s'il est pas un minimum customisé...
 
imagine que je lance download.php?file=config.php, je récupère ton fichier de configuration (on peut facilmeent supposer que ce soit celui qui contienne les login/pwd d'accès à la DB).
N'importe quel fichier php est téléchargeable en clair...
 
La meilleur méthode est :
- stockage dans une DB des noms des fichiers (par exemple, ou dans un fichier text/php)
- protection par un .htaccess à tout accès au répertoire contenant les fichiers. (pour être sûr qu'un petit malin ne s'amuse pas à downloader le fichier directement)
- la demande de download d'un fichier se fait par un lien du genre download.php?id=1
- Vérifier que la  personne (authentifiée par session) ait le droit de downloader ce fichier.
  - La correspondance avec le nom est faite par une query SQL.
  - Le droit ou nom de télécharger ce fichier est aussi stocké dans une table (stockage de l'heure autorisée + durée).
- si ok, utiliser le script de Tentacle, sinon teletubies
 

Code :
  1. $filename= sql->query->("select nom from file where id=$id" ).
  2. $ext= substr( $filename, strrpos($filename, '.') );
  3. switch( $ext ){
  4.        case "pdf": $ctype="application/pdf";              break;
  5.        case "exe": $ctype="application/octet-stream";      break;
  6.        case "zip": $ctype="application/zip";              break;
  7.        case "doc": $ctype="application/msword";            break;
  8.        case "xls": $ctype="application/vnd.ms-excel";      break;
  9.        case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  10.        case "gif": $ctype="image/gif";                    break;
  11.        case "png": $ctype="image/png";                    break;
  12.        case "jpg": $ctype="image/jpg";                    break;
  13.        default:    $ctype="application/force-download";
  14.   }
  15.   header("Pragma: public" );
  16.   header("Expires: 0" );
  17.   header("Cache-Control: must-revalidate, post-check=0, pre-check=0" );
  18.   header("Content-Type: $ctype" );
  19.   $user_agent = strtolower ($_SERVER["HTTP_USER_AGENT"]);
  20.   if ((is_integer (strpos($user_agent, "msie" ))) && (is_integer (strpos($user_agent, "win" )))) {
  21.        header( "Content-Disposition: filename=".basename($filename).";" );
  22.     } else {
  23.        header( "Content-Disposition: attachment; filename=".basename($filename).";" );
  24.   }
  25.   header("Content-Transfer-Encoding: binary" );
  26.   header("Content-Length: ".filesize($filename));
  27.   readfile("$filename" );


 
voila il ne te rest plus qu'a mettre cela en oeuvre


Message édité par ethernal le 10-01-2004 à 17:02:50
n°607179
Tentacle
Posté le 10-01-2004 à 17:06:52  profilanswer
 

Je me suis mal exprimé, c'était un exemple, je ne comptais certainement pas utilisé le script tel quel, c'était pour lui montrer un exemple (vu que, de plus, il faut que son script vérifie que l'utilisateur n'a pas déjà downloadé ce fichier). A part ça, je suis tout à fait d'accord avec toi pour ce qui est des mesures de sécurité.

n°607186
ethernal
Chercheur de vérité...
Posté le 10-01-2004 à 17:11:47  profilanswer
 

j'en étais sûr que toi tu le savais.
 
Mais il y a tellement de newbies qui récupèrent du code tel quel qu'il est utile de le préciser.
 
 :hello:  

n°608485
Phive
Raaah Lovely
Posté le 12-01-2004 à 00:02:59  profilanswer
 

hehe :)  
bah merci bien pour toutes cet aide de votre part.
Je vais tenter avec ce que vous m'avez donner tout en faisant attention à la securité...
 
encore merci !!


---------------
/!\ Post powered by Phive-online.com /!\
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP]Autoriser l'accés à un fichier pendant un temps précis ?

 

Sujets relatifs
[PHP] Vote une fois par jour[résolu]accès à un bean depuis un javascript dans une jsp...
[PHP/MYSQL][PROJET] Création d'un CMS[PHP]Mailto avec fichier joint
[PHP] include et class : petite questionSélectionner un client parmi une liste "géante" via PHP
[PHP] Comment savoir si ma page est appelé par un formulaire ?[PHP] Construire un code solide pour un site web,les etapes?
[PHP] connaitre l'ip depuis laquelle un formulaire est posté 
Plus de sujets relatifs à : [PHP]Autoriser l'accés à un fichier pendant un temps précis ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR