Maison >développement back-end >Problème PHP >Comment télécharger des fichiers en PHP ? Vous comprendrez après l'avoir lu !
Dans l'article précédent, je vous ai présenté "Comment obtenir et détecter les attributs d'un fichier en PHP ?" (Summary Sharing) ", qui vous donne une introduction détaillée à la connaissance des attributs de fichiers en PHP. Dans cet article, voyons comment télécharger des fichiers en PHP. J'espère que cela aidera tout le monde !
Dans notre vie quotidienne, nous rencontrons souvent les étapes de téléchargement de fichiers, telles que le téléchargement de photos à un cercle d'amis, l'envoi de fichiers joints à des e-mails, etc. Alors dans notre code PHP, que devons-nous faire pour télécharger des fichiers ? Le téléchargement de fichiers est l'une des fonctions très importantes du système de fichiers PHP, voyons donc comment implémenter une telle fonction.
Configurer php.ini
php.ini
想要使用文件上传的功能,首先我们需要配置php.ini,对其中的参数进行合理地设置。那我们先来看一下应该怎样去找到php.ini文件。示例如下:
首先我们输入:
<?php phpinfo(); ?>
输出结果:
由上述结果中,在Loaded Configuration File一栏中可以看到php.ini的具体路径。由此便找到了php.ini文件。
php.ini中的文件太多可以使用ctrl+F来搜索相关配置项。那我们需要配置的参数如下:
file_uploads
: on,说明服务器开启了文件上传功能;如果为 off,则说明服务器关闭了文件上传功能。
upload_tmp_dir
:上传文件的临时目录。在文件被成功上传之前,文件首先会存放到服务器端的临时目录中,不设置的为系统默认的目录。
upload_max_filesize
:服务器允许上传文件的最大值,以MB为单位。
max_execution_time
:PHP 中一个指令所能执行的最大时间,单位是秒。
memory_limit
:PHP 中一个指令所分配的内存空间,单位是 MB。
其中我们需要注意的是:配置完成后想要配置生效的话,需要重启Apache 服务器,配置的参数才生效。
预定义变量 $_FILES
在我们配置完php.ini之后,我们就需要通过预定义变量$_FILES 来对上传文件做一些限制和判断。$_FILES 变量存储的是上传文件的相关信息,其需要保存的信息如下:
$_FILES[filename][name]
:保存上传文件的文件名
$_FILES[filename][size]
: 保存上传文件的大小
$_FILES[filename][tmp_name]
: 保存上传文件的临时名称
$_FILES[filename][type]
:保存上传文件的类型
$_FILES[filename][error]
: 保存上传文件结果的代号,0 则表示成功
我们可以通过预定义变量 $_FILES结合HTML进行示例如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上传</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile"> <input type="submit" value="上传"> </form> </body> </html> <?php if(!empty($_FILES)){ foreach ($_FILES['upfile'] as $key => $value) { echo $key.'=>'.$value.'<br>'; } } ?>
运行程序后,根据表单选择要上传的文件,我以test1.txt为例,输出结果为:
根据保存的信息我们可以得出该文件的相关信息:
文件名为test1.txt;上传文件的类型为text/plain;保存上传文件的临时名称为C:WindowsphpD16F.tmp;0 则表示上传文件成功;文件的大小为5。
单文件上传
通过上面的代码,我们已经得到了要上传文件的基本信息,接下来我们需要使用 move_uploaded_file()
函数来实现上传。它的主要功能就是把刚才上传的文件移动到一个新的位置。它的语法格式如下:
move_uploaded_file(string $filename, string $destination)
其中$filenameb
表示的是上传文件的文件名,这个文件名并不是上传文件的原文件名,而是通过上一步$_FILES中tmp_name得到的文件名;$destinationb
Pour utiliser la fonction de téléchargement de fichiers, nous devons d'abord configurer php.ini et définir les paramètres de manière appropriée. Voyons d'abord comment trouver le fichier php.ini. L'exemple est le suivant :
Nous entrons d'abord :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上传</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile"> <input type="submit" value="上传"> </form> </body> </html> <?php if(!empty($_FILES)){ $tmpname = $_FILES['upfile']['tmp_name']; // 临时文件名称 $name = $_FILES['upfile']['name']; // 文件的原名称 $path = './phptest'; // 上传目录 $file_name = date('YmdHis').rand(100,999).$name;// 避免文件重名,更改文件名称 if(move_uploaded_file($tmpname, $path.'/'.$file_name)){ echo $name." 上传成功!"; }else{ echo $name." 上传失败!"; } } ?>Résultat de sortie :
À partir des résultats ci-dessus, vous pouvez voir le chemin spécifique de php.ini dans la colonne Fichier de configuration chargé. Cela a permis de trouver le fichier php.ini.
S'il y a trop de fichiers dans php.ini, vous pouvez utiliser ctrl+F pour rechercher les éléments de configuration associés. Ensuite, les paramètres que nous devons configurer sont les suivants : 🎜file_uploads
: on, indiquant que le serveur a activé le fichier fonction de téléchargement ; si elle est désactivée, cela signifie que le serveur a désactivé la fonction de téléchargement de fichiers. 🎜upload_tmp_dir
: Répertoire temporaire pour télécharger des fichiers. Avant que le fichier ne soit téléchargé avec succès, le fichier sera d'abord stocké dans le répertoire temporaire côté serveur. S'il n'est pas défini, ce sera le répertoire par défaut du système. 🎜upload_max_filesize
: La taille maximale des fichiers autorisés à être téléchargés par le serveur, en Mo. 🎜max_execution_time
: La durée maximale pendant laquelle une commande peut être exécutée en PHP, en secondes. 🎜memory_limit
: L'espace mémoire alloué par une commande en PHP, en Mo. 🎜$_FILES[filename][. name]
: Enregistrez le nom du fichier téléchargé 🎜$_FILES[filename][size]
: Enregistrez la taille du fichier téléchargé 🎜 li>$_FILES[filename][tmp_name]
: Enregistrez le nom temporaire du fichier téléchargé 🎜$_FILES[filename][type]
: Enregistrez le fichier téléchargé Tapez 🎜$_FILES[filename][error]
: Enregistrez le nom de code du résultat du fichier téléchargé, 0 signifie succès🎜<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上传</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="submit" value="上传"> </form> </body> </html> <?php if(!empty($_FILES)){ $tmpname = $_FILES['upfile']['tmp_name']; $name = $_FILES['upfile']['name']; $path = './phptest'; for ($i=0; $i < count($tmpname); $i++) { $file_name = date('YmdHis').rand(100,999).$name[$i]; if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){ echo $name[$i].' 上传成功!<br>'; }else{ echo $name[$i].' 上传失败!<br>'; } } } ?>🎜Après avoir exécuté le programme, sélectionnez le fichier à télécharger selon le formulaire que je prends test1.txt comme fichier. exemple. Le résultat de sortie est : 🎜🎜🎜🎜Selon les informations enregistrées, nous pouvons obtenir les informations pertinentes du fichier Informations : 🎜🎜Le nom du fichier est test1.txt ; le type du fichier téléchargé est text/plain ; le nom temporaire pour enregistrer le le fichier téléchargé est C:WindowsphpD16F.tmp ; 0 signifie que le fichier a été téléchargé avec succès ; la taille du fichier est 5. 🎜🎜🎜🎜Téléchargement d'un seul fichier🎜🎜Grâce au code ci-dessus, nous avons obtenu les informations de base du fichier à télécharger. Ensuite, nous devons utiliser le
move_uploaded_file() fonction Implémenter le téléchargement. Sa fonction principale est de déplacer le fichier qui vient d'être téléchargé vers un nouvel emplacement. Son format de syntaxe est le suivant : 🎜rrreee🎜où <code>$filenameb
représente le nom de fichier du fichier téléchargé. Ce nom de fichier n'est pas le nom de fichier original du fichier téléchargé, mais obtenu via tmp_name dans $_FILES. à l'étape précédente. Le nom du fichier ; $destinationb
indique l'emplacement vers lequel le fichier téléchargé sera déplacé. 🎜🎜🎜La fonction d'exécution retournera VRAI si elle est exécutée avec succès, et FALSE si elle échoue. 🎜🎜Regardons ensuite un exemple : 🎜🎜Téléchargez le fichier test1.txt tout à l'heure dans un dossier appelé phptest que j'ai créé dans le répertoire racine. L'opération est la suivante : 🎜rrreee🎜Après avoir téléchargé le fichier selon le. formulaire, le résultat de sortie est le suivant :🎜🎜🎜🎜如此则表示我想要上传的test2.txt已经上传到我需要的目录中了:
多文件上传
通过上述示例已经了解了单文件上传的过程,但是在日常使用中经常会用到的是多文件上传,那多文件上传应该怎么操作呢?
示例如下:
还和上面的示例一样,上传多个文件到我在根目录里创建的phptest文件夹里
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>PHP文件上传</title> </head> <body> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="file" name="upfile[]"><br> <input type="submit" value="上传"> </form> </body> </html> <?php if(!empty($_FILES)){ $tmpname = $_FILES['upfile']['tmp_name']; $name = $_FILES['upfile']['name']; $path = './phptest'; for ($i=0; $i < count($tmpname); $i++) { $file_name = date('YmdHis').rand(100,999).$name[$i]; if(move_uploaded_file($tmpname[$i], $path.'/'.$file_name)){ echo $name[$i].' 上传成功!<br>'; }else{ echo $name[$i].' 上传失败!<br>'; } } } ?>
输出结果:
如此结果显示,多个文件已经上传到我的文件夹里了:
推荐学习:《PHP视频教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!