PB de download de fichier sur serveur distant.

PB de download de fichier sur serveur distant. - PHP - Programmation

Marsh Posté le 15-10-2007 à 10:56:16    

Bonjour,
 
mon titre n'est peu être pas assez explicite.
Le voici donc détaillé.
Je me trouve face à une situation nouvelle...
 
Je dois faire un script qui me permette d'effectuer un download sur un fichier qui se trouve sur un serveur distant.
Un simple lien marcherait bien sauf que j'ai des actions à effectuer avant : logger, stats et vérif de droit d'accès.
Alors mon lien simple ne peut plus être utilisé.
 
Je vous donne ce que j'ai fait :

Code :
  1. <?php
  2. //authentification de l'utilisateur
  3. // et verif des droits à visualiser le fichier
  4. // logger
  5. //stats
  6. // Si tout OK, DL du fichier :
  7. header("Pragma: public" );
  8. header("Cache-Control: cache, must-revalidate" );
  9. header("Expires: 0" );
  10. header("Content-Type: application/force-download" );
  11. header("Content-Type: application/octet-stream" );
  12. header("Content-Type: application/download" );
  13. header("Content-Transfer-Encoding: binary" );
  14. header("content-type: application/pdf" );
  15. header("Content-Disposition: attachment; filename='http://serveur/distant/fichier-distant.pdf'" );
  16. // Sinon, message de refus d'accès
  17. ?>


Je précise également que qu'il me faut un DL et non un affichage à l'écran !
 
 
Il est clair que normalement, en php sur serveur local, on a un readfile...
Mais là ???
 
Quelle solution verriez vous ?
Je précise que les serveur d'aplication web et de stockage sont dans 2 DMZ distinctes et n'ont aucun lien ensemble si ce n'est ... Ce lien !
 
Merci de votre coup de main et de votre attention.
 
Arnaud
 
NB : l'étourderie me fait peut être passer à coté de quelque chose de très simple !!! eh eh   :D

Reply

Marsh Posté le 15-10-2007 à 10:56:16   

Reply

Marsh Posté le 15-10-2007 à 11:37:06    

bonjour
 
http://fr2.php.net/manual/fr/function.ftp-connect.php
http://fr2.php.net/manual/fr/function.ftp-login.php
http://fr2.php.net/manual/fr/function.ftp-fput.php
 
:)
 
tu te connect comme avec un client ftp,  
tu te logue
tu charge ton fichier en verifiant que ça soit bien chargé, et hop .. :)
 
tiens un collègue qui avait le même pb que toi ;)
http://www.commentcamarche.net/for [...] ur-distant
 
bonne chance :)
 
 

Reply

Marsh Posté le 15-10-2007 à 11:37:51    

ah oups non je me suis ptete planté, c'est un download ou un upload que tu veux faire?
 
dans le premier cas alors
http://fr.php.net/manual/fr/function.ftp-fget.php
http://fr.php.net/manual/fr/function.ftp-get.php
 
:)  
 [:magnasuprema]


Message édité par micfont999 le 15-10-2007 à 11:40:37
Reply

Marsh Posté le 15-10-2007 à 13:48:26    

Bonjour micfont999,
 
Je vois ce que tu veux dire, ce serait si simple !
Mais pas possible, ni en ftp ni autre chose.
 
Je n'ai que le lien, qui est en fait une URL recomposée par mon appli, et qui envoie des paramètres de récup pour avoir mon fichier.
 
C'est un vrai lien, avec plein de paramètres (genre URL de la sncf.com), et qui pointe sur un serveur d'appli, et qui me retourne le fichier.
 
L'idée, c'est donc que l'utilisateur puisse choisir ou enregistrer, ou ouvrir.
 
Merci quand même.
 
Arnaud

Reply

Marsh Posté le 15-10-2007 à 13:53:54    

ah ouai, merde alors ...
euh bah la je dois avouer que je vois pas trop .. je comprend pas trop ton soucis, tu pointe vers un lien sur un serveur distant, et lorsque l'on clique sur ce lien tu veux pouvoir decider de si l'on ouvre le fichier, ou l'enregistrer, après avoir fait tes stats, et autres manip que tu veux, c'est ça ?

Reply

Marsh Posté le 15-10-2007 à 13:58:43    

Oui, absolument.
 
Dans les scripts qui permettent d'obtenir un fichier en local, y'a pas de problèmes.
Ma config est OK.
Mais là, c'est guère possible, et j'ai beau reprendre ça dans tous les sens !

Reply

Marsh Posté le 15-10-2007 à 14:06:07    

ah oui la je suis désolé mais je ne te serais pas d'une grande aide ... :s désolé .. va falloir t'en remettre aux autres :)

Reply

Marsh Posté le 15-10-2007 à 15:15:20    

Normalement tu dois rajouter aussi la ligne

Code :
  1. header("Content-length: ".filesize($File));


pour que cela fonctionne.
 
Malheureusement filesize() ne fonctionne que pour les fichiers en local. Donc à moins que tu es un acces ftp, et que tu download le fichier sur ton serveur (que tu gardes en cache pour éviter de le refaire à chaque fois) pour ensuite l'envoyer au client, je ne pense pas que cela soit possible...
 
Cependant, si quelqu'un connait une autre solution, je suis preneur :p

Reply

Marsh Posté le 15-10-2007 à 15:22:46    

bah c'est un peu étrange de chopper des fichiers comme ça je trouve, autant aspirer le site lol ...
mais bon on ne sais pas trop ce qu'il veux en faire ..

Reply

Marsh Posté le 15-10-2007 à 15:26:44    

Ouais bizarre... Enfin il a surement une excellente raison.
Au pire, si il a pas d'acces ftp, il code un mini webservice en php qui récupere le fichier pdf tous les jours genre à 2h00 du matin sur son serveur. Comme ça il a la nouvelle version sur son serveur tous les jours, et comme ça il a le fichier en local.

Reply

Marsh Posté le 15-10-2007 à 15:26:44   

Reply

Marsh Posté le 15-10-2007 à 15:28:15    

ça serais plus pratique en effet d'uploader le fichier sur le serveur et de faire son analyse une fois le fichier en local

Reply

Marsh Posté le 16-10-2007 à 09:31:27    

Oui, je vois ce que vous voulez dire...
 
Mais on parle d'intranet, et le serveur de fichiers pdf doit héberger environ quelques centaines de milliers de fichiers !! eh eh !!
 
Je gère en local, sur mon serveur d'appli le portail, sur un serveur à coté, y'a mon oracle, et en déporté, y'a les fichiers.
Donc voilà le hic.
 
Mais bon, en fait je m'oriente sur une solution de popup, qui appelle une première fenêtre de script de verif des droits d'accès, puis un document.location.href sur l'url complète du fichier.
 
En tout cas, merci à vous de vous être intéressé à mon p'tit souci !
 
Arnaud

Reply

Marsh Posté le 16-10-2007 à 09:41:30    

tiens nous au courant de ta solution finale si tu à un peu de temps ^^
 
- enfin ton explication ne pose pas de soucis quand même, ça prendra juste un peu de temps, mais ça peux fonctionner :)  :jap:


Message édité par micfont999 le 16-10-2007 à 09:42:20
Reply

Marsh Posté le 16-10-2007 à 10:45:26    

Je n'y manquerai pas ;-)
 
Bonne journée
 
Arnaud

Reply

Sujets relatifs:

Leave a Replay

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