Vous pouvez utiliser PHP's fopen wrappers pour ouvrir l'emplacement FTP par PHP à partir de votre serveur, et le transmettre à l'utilisateur comme une réponse HTTP normale:
// you can use application/octet-stream to force download
header ('Content-Type: ' . $content_type_of_your_file);
// open file and pass it to output
readfile ('ftp://username:[email protected]/path/to/your.file');
Comme mentionné @Alan, si le serveur FTP est quelque part En dehors de votre réseau, cela générera du trafic supplémentaire. Vous pouvez envelopper ceci dans un schéma de mise en cache - par ex. seulement télécharger si vous n'avez pas de copie sur votre serveur web, et si vous le faites, vérifiez la fraîcheur. Ensuite, vous construisez essentiellement un miroir HTTP du site FTP, et il peut être prudent de pré-récupérer les fichiers dans votre cache avant qu'ils ne soient demandés par les utilisateurs.
C'est une excellente méthode de sécurité, mais gardez à l'esprit que vous pourriez avoir des problèmes avec les limites/coûts de bande passante, si votre serveur web en a. –
Les clauses de non-responsabilité habituelles s'appliquent: si le serveur FTP est inaccessible, ce code peut présenter un comportement similaire (en attente de la connexion). – Piskvor
@Alan: La sécurité n'est pas vraiment géniale (FTP ne supporte que l'authentification en clair). Je supposais que le serveur FTP se trouve quelque part à proximité (par exemple sur le réseau de la même société où seuls les utilisateurs de confiance pouvaient télécharger, et le téléchargement était possible via webapp). Caching et autre complexité peuvent être ajoutés à volonté :) – Piskvor