IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Force download depuis site externe dans un répertoire protégé


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Force download depuis site externe dans un répertoire protégé
    Bonjour à tous,

    Je vous explique déjà le contexte :
    Sur le site A j'ai des fichiers stockés dans un répertoire protégé par un .htaccess (Deny From All).
    Depuis ce site A je permet à des visiteurs identifiés de télécharger ces fichiers avec ce script :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $path = "fichiers/".$id."/nom_fichier.pdf";
    			if(file_exists($path) && strpos($path, '.') !== 0) {
    				header('Content-Description: File Transfer');
    				header('Content-Type: application/octet-stream');
    				header('Content-Disposition: attachment; filename='. basename($path));
    				header('Content-Transfer-Encoding: binary');
    				header('Expires: 0');
    				header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    				header('Pragma: public');
    				header('Content-Length: ' . filesize($path));
    				readfile($path);
    				exit;  
     
    			} else array_push($tab_error, "Ce fichier n'est plus disponible.");
    Jusqu'ici tout va bien !
    Mais je souhaiterais pouvoir télécharger ces fichiers depuis un site B.
    J'ai donc paramétré allow_url_fopen sur les 2 sites et mis ce code sur le site B :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $path = "http://www.domaine.com/fichiers/".$id."/nom_fichier.pdf";
    if(file_exists($path) && strpos($path, '.') !== 0) {
    	header('Content-Description: File Transfer');
    	header('Content-Type: application/octet-stream');
    	header('Content-Disposition: attachment; filename='. basename($path));
    	header('Content-Transfer-Encoding: binary');
    	header('Expires: 0');
    	header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    	header('Pragma: public');
    	header('Content-Length: ' . filesize($path));
    	readfile($path);
    	exit;  
     
    } else echo "Ce fichier n'est plus disponible.";
    Sauf que forcément file_exists renvoi false.
    Si je test avec fopen il me retourne
    failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden
    Je me demande donc si c'est vraiment possible ?

    Merci bien d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton site B est exactement comme un utilisateur se connectant avec un navigateur.
    Le code est donc le même pour les deux cas, il faut seulement autoriser en plus des utilisateur connectés, les demandes venant de l'adresse IP du serveur B.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci sabotage pour la piste.

    J'ai donc ajouté au .htaccess du site A "Allow From ipdusiteB".
    Le fopen ne renvoi plus d'erreur, mais file_exists renvoi toujours "false".

    Par contre l'IP du site n'est pas garantie "fixe" du coup si elle change = problème.
    Pour info les sites A et B sont sur le même hébergement, ils ont la même IP.

    Pas d'autres moyens ?

    Merci.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je me suis mal expliqué.

    - Soit tu autorises un accès du serveur B sur le serveur A par le .htaccess et donc le serveur B peut accéder directement par l'URL son avoir besoin du script PHP.
    - Soit le serveur B passe par le script PHP qui doit donc seulement être modifié pour autoriser le serveur B, le chemin d'accès reste local (fichiers/...).

    Mais si les deux sites sont sur la même machine, est-ce que B ne peut pas lire directement les fichiers sur leur emplacement sans passer par A ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci beaucoup !

    Ta dernière question m'a bien aidé, j'ai utilisé $_SERVER['DOCUMENT_ROOT'] et vu qu'ils ont la même racine, en changeant le dossier correspondant au domaine, ça marche impec !
    Je ne sais pas si c'est ce que tu voulais dire mais en tout cas merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [V7] Installer un module depuis les sources dans le répertoire addons
    Par Simon1992 dans le forum Odoo (ex-OpenERP)
    Réponses: 7
    Dernier message: 08/01/2016, 23h22
  2. Réponses: 10
    Dernier message: 27/06/2014, 10h31
  3. Réponses: 6
    Dernier message: 28/09/2012, 21h51
  4. accès authentifié depuis site externe
    Par nagel dans le forum Langage
    Réponses: 0
    Dernier message: 25/03/2011, 10h48
  5. Fichier dans un répertoire protégé
    Par rhumEteau dans le forum Langage
    Réponses: 4
    Dernier message: 02/07/2007, 09h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo