Maison  >  Article  >  développement back-end  >  Technologie de téléchargement et de téléchargement de fichiers en PHP

Technologie de téléchargement et de téléchargement de fichiers en PHP

WBOY
WBOYoriginal
2023-05-10 22:31:391339parcourir

PHP est un langage de programmation largement utilisé dans le développement Web. Il se caractérise par sa simplicité, sa facilité d'apprentissage, sa forte évolutivité et son cycle de développement court, il est donc largement apprécié des développeurs. Dans le développement Web, le téléchargement de fichiers est une exigence courante, et PHP fournit des fonctions et des classes intégrées pour nous aider à implémenter ces fonctions facilement. Cet article présentera la technologie de téléchargement et de téléchargement de fichiers en PHP.

1. Technologie de téléchargement de fichiers

  1. Formulaire HTML

En HTML, on peut utiliser le type de balise d'entrée Créez un élément de formulaire de téléchargement de fichier avec l'attribut "file", comme indiqué ci-dessous :

<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <input type="submit" value="上传文件" name="submit">
</form>

Il convient de noter que le formulaire doit être soumis à l'aide de la méthode POST et que l'attribut enctype doit être défini. à "multipart/form-data", afin que le formulaire puisse prendre en charge le téléchargement de fichiers. En même temps, nous devons créer un élément d'entrée avec un attribut de nom "fileToUpload". Cette valeur d'attribut sera utilisée dans le code PHP suivant pour obtenir le fichier téléchargé.

  1. Traitement PHP

Une fois que l'utilisateur a soumis le formulaire pour télécharger le fichier, nous devons le traiter en arrière-plan. En PHP, nous pouvons utiliser le tableau super global $_FILES pour obtenir les fichiers téléchargés.

<?php
$target_dir = "./uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// 检查文件是否是图片
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// 检查文件是否已经存在
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// 检查文件大小
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// 允许上传的文件类型
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}

// 如果所有检查都通过,上传文件
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>

Dans le code ci-dessus, nous définissons d'abord un répertoire $target_dir pour stocker les fichiers téléchargés, puis générons un chemin de fichier cible $target_file basé sur le nom de fichier téléchargé par l'utilisateur et $target_dir. Ensuite, nous avons effectué une série de vérifications sur le fichier téléchargé, telles que :

  • Vérifier si le fichier est un fichier image
  • Vérifier si le fichier existe déjà #🎜🎜 #
  • Vérifiez si la taille du fichier est trop grande
  • Vérifiez si le type de fichier téléchargé est autorisé
Enfin, si toutes les vérifications réussissent , nous utilisons La fonction move_uploaded_file déplace le fichier téléchargé du répertoire tmp vers l'emplacement spécifié par $target_file.

2. Technologie de téléchargement de fichiers

Le téléchargement de fichiers est généralement divisé en deux manières. La première consiste à télécharger des fichiers statiques (tels que des images, des fichiers texte, des fichiers audio et vidéo, etc.). .), dont une méthode est relativement simple ; l’autre consiste à télécharger des fichiers générés dynamiquement, ce qui est relativement plus gênant.

    Télécharger des fichiers statiques
En PHP, on peut télécharger des fichiers via la fonction header(), par exemple : #🎜🎜 #
$file = "./downloads/test.txt";

// 设置HTTP头信息以告诉浏览器下载文件
header("Content-disposition: attachment;filename=".basename($file));
header("Content-type: application/octet-stream");
header("Content-Length: ".filesize($file));
header("Pragma: no-cache");
header("Expires: 0");

// 将文件内容读取并输出给浏览器
readfile($file);
# 🎜🎜#Dans le code ci-dessus, nous spécifions d'abord un fichier $file et utilisons la fonction header() pour définir les informations d'en-tête HTTP. Parmi eux, Content-disposition spécifie le nom du fichier téléchargé, Content-type spécifie le type de fichier, Content-Length spécifie la taille du fichier et Pragma et Expires sont utilisés pour empêcher le navigateur de mettre en cache le fichier téléchargé.

Enfin, nous utilisons la fonction readfile() pour lire le contenu du fichier spécifié et le sortir vers le navigateur client, réalisant ainsi la fonction de téléchargement de fichier.

Télécharger les fichiers générés dynamiquement

  1. Pour les fichiers générés dynamiquement, nous devons d'abord les enregistrer sur le serveur, puis les utiliser comme fichiers statiques méthode de téléchargement.
  2. $content = "Hello, world!";
    $filename = "test.txt";
    $file = "./downloads/".$filename;
    
    // 将内容写入到文件中
    $handle = fopen($file, "w");
    fwrite($handle, $content);
    fclose($handle);
    
    // 返回下载文件给客户端
    header("Content-disposition: attachment;filename=".$filename);
    header("Content-type: application/octet-stream");
    header("Content-Length: ".filesize($file));
    header("Pragma: no-cache");
    header("Expires: 0");
    readfile($file);
    
    // 下载完成后删除服务器端的文件
    unlink($file);
Dans le code ci-dessus, nous enregistrons d'abord le fichier $content généré dynamiquement dans un fichier $filename côté serveur, puis définissons les informations d'en-tête HTTP via la fonction header() pour permettre au client Le navigateur télécharge le fichier. Enfin, nous utilisons la fonction unlink() pour supprimer le fichier côté serveur afin d'éviter que le fichier n'occupe les ressources côté serveur.

Résumé

Cet article présente la technologie d'upload et de téléchargement de fichiers en PHP. Ces fonctions sont très pratiques pour développer des applications Web. Lorsque vous utilisez PHP pour télécharger et télécharger des fichiers, vous devez faire attention à certains problèmes de sécurité, tels que la vérification du type, de la taille, du nom du fichier, etc., afin d'éviter les attaques d'utilisateurs malveillants. Dans le même temps, nous devons également faire de notre mieux pour optimiser les performances de téléchargement et de téléchargement de fichiers, réduire le gaspillage de ressources sur le serveur et le client et améliorer l'expérience utilisateur.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn