Je veux savoir comment implémenter la logique pour mon bouton de téléchargement en PHP. J'ai un fichier dans le serveur web et ai une page avec le bouton de téléchargement. Je veux commencer à télécharger un fichier lorsque l'utilisateur appuie sur le bouton de téléchargement. Comment implémenter? Mercicomment implémenter la logique pour mon bouton de téléchargement
Répondre
Voici comment vous démarrez un téléchargement sans laisser l'utilisateur voir le chemin réel du fichier. Faites votre point de lien vers download.php? File = filename, et assurez-vous que le fichier existe dans le dossier de téléchargement. Utilisez ensuite ce code pour vérifier si le fichier existe et laissez-le le télécharger. En option, vous pouvez mettre une vérification de connexion ou une autre vérification. En outre, vous pouvez également bloquer l'accès au dossier contenant les fichiers avec un fichier .htaccess. Si vous le souhaitez, placez le code suivant dans un fichier .htaccess dans le répertoire des fichiers.
order allow, deny
deny from all
C'est assez dangereux. Que faire si je décide de demander le fichier '../../../ home/user/something'? 'file_exists' correspondra à la requête, en supposant que le fichier existe réellement, et' readfile' se fera un plaisir de lire le fichier '/ path/to/file /../../../ home/user/something'. Vous * pouvez * sécuriser ce genre de méthode, mais pourquoi prendre ce risque? – Welbog
@Welbog: merci! J'ai complètement oublié ça .. J'ai changé le script pour qu'il ne permette que de télécharger un fichier .zip. Il pourrait être étendu bien sûr, de sorte qu'il permet plus d'extensions comme .pdf ou quelque chose. – Evert
C'est un peu mieux, mais cela vous permet quand même de récupérer des fichiers zip d'autres répertoires. Il serait préférable de ne pas utiliser les identifiants fournis par l'utilisateur dans les chemins réels. – Welbog
Dans les deux sollutions fournis (ReadFile ou en-tête X-Sendfile) le fichier peut être stocké en dehors le répertoire du serveur public (généralement appelé htdocs ou www).
//page.php
<form method="get" action="download.php">
With button <input type="submit" value="Download file" />
</form>
or
With link <a href="download.php">Download file</a>
<?php // download.php
$file = '/path/to/file.zip';
if (file_exists($file)) {
// send headers that indicate file download
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
// send file (must read comments): http://php.net/manual/en/function.readfile.php
readfile($file);
exit;
}
Une meilleure sollution, si votre serveur prend en charge l'en-tête X-Sendfile (mod_xsendfile) est:
<?php
header('Content-Disposition: attachment;filename=hello.txt');
header('X-Sendfile: /path/to/file.zip');
http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/
- 1. Comment implémenter cette logique en CSS?
- 2. Comment implémenter la logique suivante avec Jquery + PHP?
- 3. Drupal: Comment utiliser la taxonomie pour implémenter mon idée
- 4. Un bouton de téléchargement
- 5. Comment implémenter un téléchargement de fichier dans asp.net
- 6. C# logique pour implémenter la boucle foreach lorsque la case à cocher est cochée
- 7. C# Bouton suivant/précédent Logique
- 8. Comment implémenter mon serveur Java?
- 9. Comportement de la logique bit à bit (logique booléenne) La structure dans mon code semble incorrecte!
- 10. Implémenter la fonction iteritems pour mon itérateur personnalisé?
- 11. Comment implémenter reCaptcha dans mon formulaire d'inscription?
- 12. Comment implémenter Facebook à mon application
- 13. comment implémenter facebook dans mon application pour iPhone
- 14. Texte du bouton personnalisé pour le téléchargement de fichier
- 15. Comment afficher un UIProgressView pour un téléchargement dans mon application?
- 16. Comment implémenter la connexion unique dans mon projet java?
- 17. MVVM- Où devrais-je implémenter ma logique de sauvegarde?
- 18. Comment implémenter la méthode Invoke?
- 19. Comment puis-je implémenter un bouton d'annulation pour une routine de lot/file d'attente?
- 20. Comment accéder aux propriétés d'un bouton de téléchargement de fichier?
- 21. Comment puis-je modifier l'URI logique de mon service Web?
- 22. Comment tester la logique de domaine générique
- 23. Logique de programme simple pour appeler la méthode en continu
- 24. xaml: Existe-t-il une méthode pour implémenter la logique OU dans plusieurs déclencheurs?
- 25. Meilleures options pour implémenter mon propre fournisseur de transactions
- 26. Pourquoi et comment changer le style de mon bouton, mon autre bouton de composition est bien?
- 27. Réécriture de la logique?
- 28. (bouton Android) comment implémenter Deux lignes de texte avec différentes couleurs sur un bouton
- 29. comment implémenter une fenêtre flottante dans mon contrôleur de navigation?
- 30. Comment puis-je implémenter un bouton "pause" pour la musique dans un jeu Flash?
Il suffit d'utiliser un lien simple au lieu d'un bouton? – halfdan
Le problème ici est que je ne veux pas montrer aux utilisateurs un chemin où le fichier dowloadable est. Si je vais utiliser l'utilisateur de lien peut voir l'URL du fichier, ce qui n'est pas acceptable –
Vous tirez une ressource à partir d'un serveur Web. Cette ressource aura toujours une adresse et vous ne pouvez pas la cacher. – Welbog