2009-10-11 9 views

Répondre

3

diriger tous les liens de téléchargement vers un fichier php qui fera tout le contrôle des informations d'identification.

vous pouvez appeler le fichier download.php

passe le long des paramètres via les cookies, obtenir, après, session, ou tout autre manière que vous vérifier les privilèges.

Une fois les informations d'identification vérifiées, vous pouvez envoyer un en-tête approprié.

si elle est une image, l'en-tête serait header("Content-type: image/jpeg");

Je suppose que vous possédez également ce serveur distant.

quelques liens utiles:

MIME types

PHP Header Function

+3

Avec cette solution, veillez à protéger le téléchargement du fichier en tapant directement l'URL dans la barre d'adresse. Par exemple, placez les fichiers protégés dans un répertoire situé à l'extérieur de la racine du site Web ou accédez aux directives à httpd.conf. – xanadont

+0

et si c'est sur un autre serveur de toute façon, vous pouvez créer le fichier ou récupérer le fichier à télécharger de différentes façons. Rappelez-vous juste que vous ne serez pas en mesure de se défendre contre les téléchargeurs les plus déterminés. – pxl

0

Je suis habitué à le faire dans ASP.NET où il est construit, mais ce article semble chronique votre situation exacte.

2

Comme @pxl dit, vous devez vérifier l'autorisation et la sortie du type MIME correct comme un en-tête HTML (comme il a dit: header("Content-type: image/jpeg");)

En outre, une fois que vous avez fini avec cela, vous devrez le contenu de sortie réel du fichier et sa taille (en octets) en tant que tels:

header("Content-Length: ".filesize("FILENAME")*1.001); 
/* The *1.001 puts a nice buffer on the filesize, I read about it online. 
Browsers will stop downloading exactly at the Content-Length, but if they go 
over, it's not a big deal at all. */ 
readfile("FILENAME"); 
die(); 

assurez-vous de stocker le fichier dans un répertoire qui n'est pas accessible depuis le web.

+0

yup, et vous pouvez récupérer ce fichier à partir de n'importe où le serveur web a également accès. – pxl

0

Voici ce que je ferais:

  1. Construit un PHP-SOAP-Sever sur le serveur distant B qui contient les fichiers. Chaque fois qu'un utilisateur déclenche un téléchargement sur votre serveur principal A connectez-vous au Serveur SOAP sur B et réservez un ticket à l'utilisateur en spécifiant une adresse IP et l'ID/chemin du fichier à télécharger.

  2. serveur B va maintenant créer un TicketID (qui ne devrait être valable pour une durée limitée) pour le téléchargement et le retourner à A.

  3. serveur A redirige l'utilisateur vers le serveur B fournissant le TicketID comme Paramètre GET

  4. Le serveur B vérifie maintenant si le ticket a déjà été utilisé, a expiré ou si l'utilisateur provient de la mauvaise adresse IP. Si aucun d'eux ne s'applique, servir le fichier et marquer le ticket tel qu'il est utilisé.

Remarque: Sur le serveur B ne gardez pas en cours d'exécution PHP tout en servant le fichier, mais utiliser le X-Sendfile header à la place.Sinon, le téléchargement peut s'arrêter après l'exécution de PHP max.

Questions connexes