Comment télécharger un fichier existant en PHP
J'ai un fichier pdf sur mon serveur. Je veux créer un tel lien, l'utilisateur peut cliquer dessus et de télécharger ce fichier pdf. Je suis à l'aide de Zend cadre de travail avec Php.
La Question du titre est superflu. Comment je vais faire pour télécharger un fichier qui n'existe pas?
Vous pourriez générer un fichier sur l'exécution des scripts, en le tenant uniquement dans la mémoire; un argumenter ce n'est pas le téléchargement d'un 'fichier existant". Il n'aurions certainement pas exister sur le système de fichiers. 🙂
Vous pourriez générer un fichier sur l'exécution des scripts, en le tenant uniquement dans la mémoire; un argumenter ce n'est pas le téléchargement d'un 'fichier existant". Il n'aurions certainement pas exister sur le système de fichiers. 🙂
OriginalL'auteur Muhammad Zeeshan | 2010-08-26
Vous devez vous connecter pour publier un commentaire.
placer ce code dans un fichier php et de l'appeler f.e. "download.php":
Exemple: place de ce type de lien dans le document où le fichier de téléchargement est offert:
Plus De Détail:
http://www.finalwebsites.com/forums/topic/php-file-download
OriginalL'auteur Naveed
Je suppose il y a une raison pour laquelle vous ne pouvez pas juste un lien vers le fichier pdf directement, tels que la nécessité d'authentifier l'utilisateur. Dans ce cas, vous devez régler correctement les en-têtes, et, comme d'autres l'ont noté, vous pouvez utiliser get_file_contents pour desservir le fichier pdf. Cependant, l'utilisation de get_file_contents exige que vous lisez le fichier dans la mémoire avant de vous envoyer la réponse. Si le fichier est volumineux, ou si vous recevez beaucoup de demandes à la fois, vous pouvez facilement exécuter de mémoire. Une excellente solution si vous utilisez Apache ou Lighttpd est d'utiliser XSendFile. Avec XSendFile vous avez défini le X-Sendfile en-tête de réponse pour le chemin d'accès du fichier, et votre serveur web sert le fichier directement à partir du disque - sans révéler l'emplacement du fichier sur disque.
Le problème avec cette solution est que le module doit être installé sur un serveur Apache, et il doit être configuré pour fonctionner avec Lighttpd.
Une fois XSendFile est installé, votre Zend Framework code devrait ressembler à quelque chose comme ce qui suit:
OriginalL'auteur Isaac
fpassthru
us3.php.net/manual/en/function.fpassthru.php quefile_get_contents
us3.php.net/manual/en/function.file-get-contents.phphors-sujet: s'il vous plaît suggérer plus sur fpassthru. est-il sécuritaire? ne savait jamais à ce sujet.
C'est horrible pour les performances, le dumping contenu du fichier dans la mémoire. Je souhaite que j'avais downvotes gauche.
Alors... Que faire si le PDF de 50 méga-octets, et votre
memory_limit
est 10meg?OriginalL'auteur thevikas
J'ai été en utilisant cette réutilisables d'aide d'action pour l'envoi de fichiers pour les utilisateurs. Il fonctionne bien et c'est mieux que de déconner avec les en-têtes de vous-même.
OriginalL'auteur Matt Way
Je ne sais pas si Zend fournit une classe pour cette. En général, ceci est réalisé en utilisant l'en-tête de la fonction. regarder le PHP site:
Il y a quelques exemples de téléchargement de fichiers.
Bonne chance!
OriginalL'auteur Rene Terstegen
J'ai toujours utilisé le become_file_download fonction de l'open source BalPHP de la bibliothèque que vous pouvez plug-and-play (coller) dans votre projet. Il permet de:
Vous pouvez trouver la dernière version ici:
http://github.com/balupton/balphp/blob/master/trunk/lib/core/functions/_files.funcs.php#L75
Et ici, c'est de copier et collé à compter du 27 août 2010:
Il dépend également d'un autre plug-and-play fonction appelée ensure_timestamp que vous pouvez trouver ici:
http://github.com/balupton/balphp/blob/master/trunk/lib/core/functions/_datetime.funcs.php#L31
OriginalL'auteur balupton