Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/03/2007, 09h30   #1
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
Par défaut envoi fichier serveur-->navigateur

bonjour,

je suis nouveau dans le domaine et je viens de développer un site web avec Apache et php.
mon but étant d'empécher aux utilisateurs non authentifié d'accéder à certaines ressources (fichiers .txt, .doc, etc.) en tapant simplement leur url dans leur navigateur, j'ai mis ces ressources dans un répertoire de mon serveur web et je l'ai protégé avec un fichier .htaccess dont voici le contenu:
Code :
1
2
3
4
5
RewriteEngine on
RewriteRule ^(.+)$ download.php
 
Order Deny,Allow
Deny from all
toutes les demandes vers un des fichiers de ce répertoire sont redirigée vers le script download.php.
j'ai fait ce script afin de pouvoir contrôler si l'utilisateur qui demande la ressource dispose des droits nécessaires.

mon problème est que une fois que j'ai vérifier les droits de l'utilisateur, je ne sais pas comment lui envoyer le fichier qu'il a demandé.

avez-vous une idée sur la façon dont je pourrais réaliser cela ?

merci d'avance :-)
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 09h32   #2
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Une simple redirection vers le fichier en question devrait suffir je pense.

En revanche tu ne pourras pas faire sauter la demande de confirmation à l'utilisateur
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 09h59   #3
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
merci pour ta réponse.

pour ce qui est de faire sauter la demande de confirmation à l'utilisateur, ce n'est pas un problème.

j'ai déja essayer de faire une redirection avec la fonction header vers le fichier demandé, mais cela ne marche pas.
je pense que cela est du au fait que la redirection faites avec header est elle même redirigée vers mon script, et ainsi de suite.... ça tourne en boucle.

aurais-tu une autre idée ?
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h30   #4
Membre chevronné
 
Inscription : juin 2005
Messages : 572
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Haute Vienne (Limousin)

Informations forums :
Inscription : juin 2005
Messages : 572
Points : 690
Points : 690
Une copie dans un répertoire temporaire pourrait être une solution ?
__________________
Tout pas mieux que tout le monde : évitez les questions techniques en mp sinon à quoi bon poster sur un forum ?

Petite citation : "Le sage cherche la vérité, l'imbécile l'a déjà trouvée"
ratapapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h37   #5
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
qu'entend-tu par une copie dans un répertoire temporaire?

le fait de copier le fichier dans un autre répertoire et de faire une redirection vers ce fichier?
--> ce fichier va être accessible dans le répertoire temporaire je pense. et je voudrais éviter cela.
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h44   #6
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Tu devrais sans doute modifier ta condition de rewrite.
Pourquoi ne pas plutôt définir download.php comme page par défaut (comme si tu l'appelais index.php). Je sais qu'on peut le faire, mais je sais plus comment
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 10h48   #7
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
Citation:
Pourquoi ne pas plutôt définir download.php comme page par défaut (comme si tu l'appelais index.php). Je sais qu'on peut le faire, mais je sais plus comment
il suffit de modifier la ligne DirectoryIndex du fichier de conf d'apache. mais je ne vois pas comment cela pourrais résoudre le problème.

pour ce qui est du rewrite, que mettrais-tu?
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h09   #8
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
ben ça supprimerais la boucle, le voilà l'avantage...

edit : pour le rewrite, je ne sais pas! En fait, je voulais dire retirer le rewrite pour mettre DirectoryIndex a la place.
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h41   #9
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
le probleme c'est que le rewrite je ne pense pas pouvoir le supprimé car c'est lui qui me permet de redirigé toutes les requêtes vers mon script.

le fait de mettre download.php comme page par défaut ne reviens pas au même que de faire un rewrite. il permet uniquement de choisir une page lorsque celle-ci n'est pâs précisé dans l'URL, mais ne permet pas de faire une redirection vers cette page lorsque l'on demande un des fichiers du répertoire.

je ne sais pas si c'est moi qui comprend pas ce que vu veux dire, où si tu n'as pas compris ce que je voulais. peut-être que je me suis mal exprimé

si c'est moi qui comprend pas, pourrais-tu me reexpliquer de façons plus détaillé le fonctionnement de ce que tu propose.

merci
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h46   #10
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Non, tu as raison, je proposais cette solution juste au cas où. Du coup, je ne vois pas comment faire, mais de toute façon il faut que tu change ton rewrite rule, ça il n'y a pas de doutes...
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 11h51   #11
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
Bon ben j'ai essayé de modifier mon htaccess comme cela.

Code :
1
2
3
RewriteEngine on
RewriteRule ^(.+)[^O][^K]$ download.php
RewriteRule ^(.+)OK$ $1
Pour que vous compreniez ce que j'ai voulu faire, je vais vous expliquer:
la prémière ligne fais une redirection permanente vers le script download.php lorsque l'on demande la ressource.
Comme avant, ce script vérifie toujours les droits d'accés et effectue une redirection (avec la fonction header) vers le fichier demandé, en ajoutant OK à la fin de l'URL.
ainsi, lors de la nouvelle requete (lors de la redirection), la première RewriteRule est ignoré, et la deuxième prend le relais et effectue une nouvelle redirection vers le fichier initialement demandé.

Pourtant cela ne marche pas et j'ai l'impression que l'on rentre dans une boucle sans fin, c'est à dire que l'on est redirigé vers download.php, puis vers le fichier, etc....

par pitié aidez moi car je crois que je vais péter un cable
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h30   #12
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
si ma solution n'est pas bonne, je pensait à une autre.

connaissez-vous une fonction php (ou une autre méthode) qui fasse ouvrir une boite de dialogue sur le client pour lui demander s'il souhaite ouvrir ou enregistrer un fichier.
comme ça il me suffirait d'utiliser cette fonction dans mon script download.php

j'attend votre réponse
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h30   #13
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Rajoute un [L] a la fin de ta 2ème règle, il me semble que c'est ce qui permet de ne plus réécrire ensuite. A vérifier.
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h48   #14
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
c'est ce que je pensait aussi, j'avais déjà essayé, mais en fait ça ne marche pas mieux.
je pense que [L] evite simplement de parcourir les autres règles du htaccess pour cette requete, mais lorsque l'on fait une redirection (comme à la fin de la deuxième règle), le processus de rewriting recommence à zéro.

pour ce qui est de l'autre solution que j'ai proposé avec une fonction php, as tu une idée ?
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 14h53   #15
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2007
Messages : 41
Points : 29
Points : 29
Bonjour,
N'est-il pas préférable d'interdire le répertoire à tout internaute et permettre le téléchargement seulement via le script php qui lui a les droits de proposer à l'internaute le fichier?
Mormegil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 15h09   #16
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
j'avais déjà envisagé cette solution, mais le problème c'est que lorsque je faisait une redirection avec la fonction headers à l'intérieur de ce script, l'acces été toujours refusé par le serveur.
c'était comme si c'était le client qui avait fais la demande. pour preuve, lorque j'autorisait le client cela marchait.

voici comment j'avais rempli mon htaccess
Code :
1
2
3
4
5
 
Order Deny,Allow
Deny from all
#Allow from 194.57.124.155 # IP de mon client
Allow from 194.57.124.73 IP de mon serveur
voici comment j'ai fais ma redirection dans mon script:
Code :
1
2
#redirection vers le fichier demandé.
header("Location: https://194.57.124.155/.../.../nom_de_mon_fichier.truc");
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 15h11   #17
Membre chevronné
 
Avatar de haltabush
 
Développeur Web
Inscription : avril 2005
Messages : 726
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2005
Messages : 726
Points : 790
Points : 790
Citation:
Envoyé par Le fut
c'est ce que je pensait aussi, j'avais déjà essayé, mais en fait ça ne marche pas mieux.
je pense que [L] evite simplement de parcourir les autres règles du htaccess pour cette requete, mais lorsque l'on fait une redirection (comme à la fin de la deuxième règle), le processus de rewriting recommence à zéro.

pour ce qui est de l'autre solution que j'ai proposé avec une fonction php, as tu une idée ?
tu as essayé de mettre la 2ème en 1er?
haltabush est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 15h12   #18
Membre habitué
 
Inscription : mars 2007
Messages : 87
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2007
Messages : 87
Points : 109
Points : 109
bonjour,

utilise readfile dans ton fichier download.php. Par exemple (exemple issu de php.net):

Code :
1
2
3
4
5
6
 
header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header ("Content-Type: application/octet-stream");
header ("Content-Length: " . filesize($theFile));
header ("Content-Disposition: attachment; filename=$theFileName");
readfile($theFile);
supergogol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 15h18   #19
Invité régulier
 
Inscription : décembre 2006
Messages : 47
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : décembre 2006
Messages : 47
Points : 8
Points : 8
Citation:
Envoyé par haltabush
tu as essayé de mettre la 2ème en 1er?
oui ça ne marche pas non plus.

ps: supergogol je vais essayer ta solution tout de suite
Le fut est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2007, 15h22   #20
Nouveau Membre du Club
 
Inscription : mars 2007
Messages : 41
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mars 2007
Messages : 41
Points : 29
Points : 29
Citation:
Envoyé par Le fut
j'avais déjà envisagé cette solution, mais le problème c'est que lorsque je faisait une redirection avec la fonction headers à l'intérieur de ce script, l'acces été toujours refusé par le serveur.
c'était comme si c'était le client qui avait fais la demande. pour preuve, lorque j'autorisait le client cela marchait.
Il faut que ce soit le php qui propose le fichier et non une simple redirection. L'idée de supergogol pour faire cela me parait bonne.
Mormegil est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h04.


 
 
 
 
Partenaires

Hébergement Web