PHP Téléversement de fichiers
Grâce à PHP, vous pouvez téléverser des fichiers vers le serveur.
Les exemples de ce chapitre sont réalisés dans le cadre du projet de test, avec la structure de répertoires suivante :
test |-----upload # 文件上传的目录 |-----form.html # 表单文件 |-----upload_file.php # php 上传代码
Téléchargement du code source
Créer un formulaire de téléversement de fichiers
Permettre aux utilisateurs de téléverser des fichiers à partir d'un formulaire est très utile.
Veuillez consulter le formulaire HTML suivant pour le téléversement de fichiers :
<html> <head> <meta charset="utf-8"> <title>Example(example.com)</title> </head> <body> <form action="upload_file.php" method="post" enctype="multipart/form-data"> <label for="file">文件名:</label> <input type="file" name="file" id="file"><br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
Enregistrez le code ci-dessus dans le fichier form.html.
Voici quelques notes concernant le formulaire HTML ci-dessus :
- <form>L'attributenctypede la balise spécifie quel type de contenu utiliser lors de la soumission du formulaire. Lorsque le formulaire a besoin de données binaires, telles que le contenu d'un fichier, utilisez "multipart/form-data"。
- <input>L'attributtype="file"de la balise spécifie que l'entrée doit être traitée comme un fichier. Par exemple, lors de l'aperçu dans le navigateur, vous verrez un bouton Parcourir à côté de la zone de saisie.
Remarque :Permettre aux utilisateurs de téléverser des fichiers représente un risque de sécurité énorme. Veuillez autoriser uniquement les utilisateurs de confiance à effectuer des opérations de téléversement de fichiers.
Créer un script de téléversement
Le fichier "upload_file.php" contient le code pour téléverser des fichiers :
<?php
if ($_FILES["file"]["error"] > 0)
{
echo "错误:" . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
?>
En utilisant le tableau global $_FILES de PHP, vous pouvez téléverser des fichiers depuis l'ordinateur client vers un serveur distant.
Le premier paramètre est le nom du champ du formulaire, et le second indice peut être "name", "type", "size", "tmp_name" ou "error". Comme montré ci-dessous :
- $_FILES["file"]["name"] - Le nom du fichier téléversé
- $_FILES["file"]["type"] - Le type du fichier téléversé
- $_FILES["file"]["size"] - La taille du fichier téléversé, en octets
- $_FILES["file"]["tmp_name"] - Le nom de la copie temporaire du fichier stockée sur le serveur
- $_FILES["file"]["error"] - Le code d'erreur causé par le téléversement du fichier
Il s'agit d'une méthode de téléversement de fichiers très simple. Pour des raisons de sécurité, vous devriez ajouter des restrictions sur les utilisateurs autorisés à téléverser des fichiers.
Restrictions de téléversement
Dans ce script, nous avons ajouté des restrictions sur le téléversement de fichiers. Les utilisateurs ne peuvent téléverser que des fichiers .gif, .jpeg, .jpg, .png, et la taille du fichier doit être inférieure à 200 kB :
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "非法的文件格式";
}
?>
Enregistrer le fichier téléversé
L'exemple ci-dessus crée une copie temporaire du fichier téléversé dans le dossier temporaire PHP sur le serveur.
Ce fichier de copie temporaire disparaîtra à la fin du script. Pour enregistrer le fichier téléversé, nous devons le copier à un autre emplacement :
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当前目录下的 upload 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
Le script ci-dessus vérifie si le fichier existe déjà ; s'il n'existe pas, il copie le fichier dans le répertoire nommé "upload".
L'opération de démonstration de téléversement de fichier est illustrée ci-dessous :
