English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à forcer le téléchargement d'un fichier en utilisant PHP.
Généralement, vous n'avez pas besoin d'utiliser un langage de script côté serveur (par exemple PHP) pour télécharger des images, des fichiers zip, des documents PDF, des fichiers exe, etc. Si de tels fichiers sont stockés dans un dossier accessible au public, il suffit de créer un lien vers ce fichier. Le navigateur téléchargera automatiquement le fichier chaque fois que l'utilisateur cliquera sur le lien.
<a href="downloads/Télécharger le fichier Zip >/a> <a href="downloads/Télécharger le fichier PDF >/a> <a href="downloads/sample.jpg">Télécharger le fichier image</a> <a href="downloads/<a href="downloads setup.exe">Télécharger le fichier EXE</a>
Cliquez sur un lien vers un fichier PDF ou une image ne provoque pas son téléchargement direct sur le disque dur. Il s'ouvrira uniquement dans le navigateur. De plus, vous pouvez le sauvegarder sur le disque dur. Cependant, par défaut, les fichiers zip et exe sont automatiquement téléchargés sur le disque dur.
Vous pouvez utiliser la fonction PHP readfile() pour forcer le téléchargement direct d'une image ou d'un autre type de fichier sur le disque dur de l'utilisateur. Ici, nous allons créer une simple bibliothèque d'images qui permet aux utilisateurs de télécharger des fichiers d'images en cliquant sur le curseur depuis le navigateur.
Créons un nom de variable "image-gallery.php" du fichier, et insérez le code suivant à l'intérieur.
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Simple Image Gallery</title> <style type="text/css"> .img-box{ display: inline-block; text-align: center; margin: 0 15px; } </style> </head> <?php //Array contenant des noms de fichiers d'images d'exemple $images = array("kites.jpg", "balloons.jpg"); //Parcourir l'array pour créer une bibliothèque d'images foreach($images as $image){ -box"> echo '<img src="images/' . $image . '" width="200" alt="' . pathinfo($image, PATHINFO_FILENAME) . '">'; echo '<p><a href="download.html?file=' . urlencode($image) . '">Télécharger</a></p>'; echo '</div>'; } ?> </html>
Si vous examinez attentivement le code d'exemple ci-dessus, vous remarquerez que le lien de téléchargement pointe vers le fichier "download.php", et que l'URL contient également le nom de fichier de l'image en tant que chaîne de recherche. De plus, nous utilisons la fonction PHP urlencode() pour encoder le nom de fichier de l'image afin de pouvoir le transmettre en toute sécurité en tant que paramètre d'URL, car le nom de fichier peut contenir des caractères non sécurisés pour l'URL.
这是“download.php”文件的完整代码,可强制下载图像。
<?php if(isset($_REQUEST["file"])){ //获取参数 $file = urldecode($_REQUEST["file"]); //解码URL编码的字符串 /* 测试文件名是否包含非法字符 例如使用正则表达式的“ ../” */ if(preg_match('/^.[^.-a--9_]$+-z]$/i', $file)){ $filepath = 'images';/'' . $file; // 流程下载 if(file_exists($filepath)) { header('Content--Description: File Transfer'); header('Content--Type: application/octet-stream); header('Content--Disposition: attachment; filename="'.basename($filepath).'"'); header('Expires: 0'); header('Cache--Control: must-revalidate'); header('Pragma: public'); header('Content--Length: ' . filesize($filepath); flush(); //冲洗系统输出缓冲区 readfile($filepath); die(); } else { http_response_code();404); die(); } } else { die("Invalid file name!"); } } ?>
同样,您可以强制下载其他文件格式,例如.doc,pdf文件等。
上面示例(第8行)中的正则表达式将完全不允许名称以点字符(.)开头或结尾的文件,例如,例如,它允许使用kites.jpg或Kites.jpg,myscript.min.js等文件名,但不允许kites.jpg.或.kites.jpg。
请查看有关正则表达式的教程,以详细了解正则表达式。