Dans cet article, je vais expliquer les bases du téléchargement de fichiers en PHP. Premièrement, nous allons passer en revue les options de configuration PHP qui doivent être mises en place pour réussir le téléchargement de fichiers. Ensuite, nous allons développer un exemple concret sur la façon de télécharger un fichier..
Il y a quelques paramètres de configuration PHP que vous voudrez vérifier au préalable pour les téléchargements de fichiers réussis. Dans cette section, nous allons passer en revue toutes les options importantes pour le téléchargement de fichiers PHP. Ces options peuvent être configurées dans le php.ini fichier.
Si vous ne savez pas où trouver votre php.ini fichier, vous pouvez utiliser le php_ini_loaded_file ()
pour le localiser. Créez simplement un fichier PHP sur votre serveur avec la ligne suivante et ouvrez-le à partir du navigateur..
Voici un extrait d'un fichier d'installation avec quelques défauts utiles.
; Autoriser ou non les téléchargements de fichiers HTTP. file_uploads = On; Répertoire temporaire pour les fichiers téléchargés HTTP. ; Utilisera les valeurs par défaut du système si non défini. ; upload_tmp_dir =; Taille maximale autorisée pour les fichiers téléchargés. upload_max_filesize = 16M; Nombre maximal de fichiers pouvant être téléchargés via une seule requête max_file_uploads = 20; Taille maximale des données POST acceptées par PHP. post_max_size = 20M max_input_time = 60 memory_limit = 128M max_execution_time = 30
file_uploads
La valeur de la file_uploads
directive devrait être mis à Sur
pour permettre le téléchargement de fichiers. La valeur par défaut de cette directive est Sur
.
upload_max_filesize
le upload_max_filesize
directive vous permet de configurer la taille maximale du fichier téléchargé. Par défaut, il est défini sur 2M
(deux mégaoctets), et vous pouvez remplacer ce paramètre à l’aide de la touche .htaccess déposer aussi bien. Deux mégaoctets ne correspondent pas beaucoup aux normes actuelles, vous devrez donc peut-être augmenter ce nombre. Si vous obtenez une erreur qui fichier dépasse upload_max_filesize
lorsque vous essayez de télécharger un fichier, vous devez augmenter cette valeur. Si vous le faites, assurez-vous également d'augmenter post_max_size
(voir ci-dessous).
upload_tmp_dir
Définit un répertoire temporaire qui sera utilisé pour stocker les fichiers téléchargés. Dans la plupart des cas, vous n'avez pas à vous soucier de ce paramètre. Si vous ne le définissez pas, le répertoire temporaire par défaut du système sera utilisé.
post_max_size
le post_max_size
directive vous permet de configurer la taille maximale des données POST. Les fichiers étant chargés avec des requêtes POST, cette valeur doit être supérieure à celle définie pour le upload_max_filesize
directif. Par exemple, si votre upload_max_filesize
est 16M
(16 mégaoctets), vous voudrez peut-être définir post_max_size
à 20M
.
max_file_uploads
Il vous permet de définir le nombre maximal de fichiers pouvant être téléchargés à la fois. La valeur par défaut est 20
, un montant raisonnable.
max_input_time
C'est le nombre maximum de secondes pendant lequel un script est autorisé à analyser les données d'entrée. Vous devez lui attribuer une valeur raisonnable si vous traitez des téléchargements de fichiers volumineux.. 60
(60 secondes) est une bonne valeur pour la plupart des applications.
limite_mémoire
le limite_mémoire
directive indique la quantité maximale de mémoire qu'un script peut utiliser. Si vous rencontrez des problèmes lors du téléchargement de fichiers volumineux, vous devez vous assurer que la valeur de cette directive est supérieure à celle que vous avez définie pour le fichier. post_max_size
directif. La valeur par défaut est 128M
(128 mégaoctets), donc à moins que vous n'ayez un très grand post_max_size
et upload_max_filesize
, vous n'avez pas besoin de vous inquiéter à ce sujet.
max_execution_time
C'est le nombre maximal de secondes qu'un script est autorisé à exécuter. Si vous rencontrez des problèmes lors du téléchargement de fichiers volumineux, vous pouvez augmenter cette valeur.. 30
(30 secondes) devrait bien fonctionner pour la plupart des applications.
Construisons maintenant un exemple concret pour illustrer le téléchargement de fichiers en PHP.
Une fois que vous avez configuré les paramètres PHP, vous êtes prêt à essayer les fonctionnalités de téléchargement de fichiers PHP..
Notre dépôt GitHub a un exemple de code dont je vais parler tout au long de cet article. Donc, si vous voulez suivre, allez-y et téléchargez-le à partir de GitHub.
Nous allons créer deux fichiers PHP: index.php et upload.php. le index.php Le fichier contient le code qui est responsable de l'affichage du formulaire de téléchargement de fichier. D'autre part, le upload.php file est responsable du téléchargement d'un fichier sur le serveur.
En outre, un fichier sera chargé dans le upload_files répertoire, vous devez donc vous assurer que ce dossier existe et est accessible en écriture par le serveur Web
utilisateur.
Dans cette section, nous allons passer en revue les parties clés du index.php fichier.
Jetons un coup d'oeil au index.php déposer sur GitHub:
Téléchargement de fichier PHP % s', $ _SESSION [' message ']); unset ($ _SESSION ['message']); ?>
Bien que cela puisse ressembler à un formulaire PHP typique, il existe une différence importante dans la valeur de la enctype
attribut du étiquette. Il doit être réglé sur
multipart / form-data
puisque le formulaire contient le champ de fichier.
le enctype
attribut spécifie le type d'encodage à utiliser lors de la soumission du formulaire et prend l'une des trois valeurs suivantes:
application / x-www-form-urlencoded
: Ceci est la valeur par défaut lorsque vous ne définissez pas la valeur du enctype
attribuer explicitement. Dans ce cas, les caractères sont codés avant leur envoi au serveur. Si vous n'avez pas le champ de fichier dans votre formulaire, vous devez utiliser cette valeur pour la enctype
attribut.multipart / form-data
: Quand vous utilisez le multipart / form-data
valeur pour le enctype
attribut, il vous permet de télécharger des fichiers en utilisant la méthode POST. En outre, il s'assure que les caractères ne sont pas encodés lorsque le formulaire est soumis.texte simple
: Ceci n'est généralement pas utilisé. Avec ce réglage, les données sont envoyées non codées..Ensuite, nous produisons le champ de fichier, qui vous permet de sélectionner un fichier à partir de votre ordinateur..
En dehors de cela, nous avons affiché un message en haut du formulaire. Ce message indique l’état du téléchargement du fichier et sera défini dans une variable de session par le upload.php scénario. Nous examinerons cela plus en détail dans la section suivante.
% s', $ _SESSION [' message ']); unset ($ _SESSION ['message']); ?>
Alors ça résume le index.php fichier. Dans la section suivante, nous verrons comment gérer le fichier téléchargé côté serveur..
Dans la section précédente, nous avons créé le formulaire HTML qui s’affiche côté client et vous permet de télécharger un fichier à partir de votre ordinateur. Dans cette section, nous verrons la contrepartie côté serveur qui vous permet de gérer le fichier téléchargé..
Tirez le code de la upload.php déposer sur GitHub. Nous allons passer en revue les parties importantes de ce fichier.
dans le upload.php fichier, nous avons vérifié si c'est une demande POST valide en premier lieu.
if (isset ($ _ POST ['uploadBtn'])) && $ _POST ['uploadBtn'] == 'Upload') …
En PHP, lorsqu'un fichier est téléchargé, le $ _FILES
La variable superglobal contient toutes les informations sur le fichier téléchargé. Il est initialisé en tant que tableau et peut contenir les informations suivantes pour un téléchargement de fichier réussi..
tmp_name
: Le chemin temporaire où le fichier est téléchargé est stocké dans cette variable.prénom
: Le nom actuel du fichier est stocké dans cette variable.Taille
: Indique la taille du fichier téléchargé en octets.type
: Contient le type mime du fichier téléchargé.Erreur
: S'il y a une erreur pendant le téléchargement du fichier, cette variable est remplie avec le message d'erreur approprié. En cas de téléchargement de fichier réussi, il contient 0, que vous pouvez comparer en utilisant le UPLOAD_ERR_OK
constant.Après avoir validé la demande POST, nous vérifions que le téléchargement du fichier a réussi.
if (isset ($ _ FILES ['UploadFile']) && $ _FILES ['UploadFile'] ['error'] === UPLOAD_ERR_OK) …
Vous pouvez voir que le $ _FILES
la variable est un tableau multi-dimensionnel, le premier élément est le nom du champ de fichier et le second élément contient les informations sur le fichier téléchargé, comme indiqué précédemment.
Si le téléchargement du fichier réussit, nous initialisons quelques variables avec des informations sur le fichier téléchargé..
// récupère les détails du fichier téléchargé $ fileTmpPath = $ _FILES ['uploadFile'] ['tmp_name']; $ fileName = $ _FILES ['UploadFile'] ['name']; $ fileSize = $ _FILES ['UploadFile'] ['size']; $ fileType = $ _FILES ['uploadFile'] ['type']; $ fileNameCmps = exploser (".", $ fileName); $ fileExtension = strtolower (end ($ fileNameCmps));
Dans l'extrait ci-dessus, nous avons également identifié l'extension du fichier téléchargé et l'avons stocké dans la $ fileExtension
variable.
Comme le fichier téléchargé peut contenir des espaces et d'autres caractères spéciaux, il est préférable de nettoyer le nom du fichier, et c'est exactement ce que nous avons fait dans l'extrait suivant..
$ newFileName = md5 (time (). $ FileName). '.' . $ fileExtension;
Il est important de limiter le type de fichier pouvant être téléchargé à certaines extensions et de ne pas tout autoriser à l'aide du formulaire de téléchargement. Nous l'avons fait en vérifiant l'extension du fichier téléchargé avec un ensemble d'extensions que nous souhaitons autoriser pour le téléchargement..
$ allowedfileExtensions = array ('jpg', 'gif', 'png', 'zip', 'txt', 'xls', 'doc'); if (in_array ($ fileExtension, $ allowedfileExtensions)) …
Enfin, nous utilisons le move_uploaded_file
fonction pour déplacer le fichier téléchargé vers l'emplacement spécifique de notre choix.
// répertoire dans lequel le fichier téléchargé sera déplacé $ uploadFileDir = './uploaded_files/'; $ dest_path = $ uploadFileDir. $ newFileName; if (move_uploaded_file ($ fileTmpPath, $ dest_path)) $ message = 'Le fichier a été téléchargé avec succès.'; else $ message = 'Une erreur est survenue lors du déplacement du fichier dans le répertoire de téléchargement. Assurez-vous que le répertoire de téléchargement est accessible en écriture pour le serveur Web. ';
le move_uploaded_file
fonction prend deux arguments. Le premier argument est le nom du fichier chargé et le second argument est le chemin de destination où vous souhaitez déplacer le fichier..
Enfin, nous redirigeons l'utilisateur vers le index.php fichier. En outre, nous définissons le message approprié dans la variable de session, qui sera affiché aux utilisateurs après la redirection dans le répertoire. index.php fichier.
N'oubliez pas de créer le upload_files répertoire et le rendre accessible en écriture par le serveur Web utilisateur. Ensuite, allez-y et lancez le index.php fichier, qui devrait afficher le formulaire de téléchargement de fichier qui ressemble à ceci:
Clique sur le Feuilleter bouton-qui devrait ouvrir une boîte de dialogue qui vous permet de sélectionner un fichier à partir de votre ordinateur. Sélectionnez un fichier avec l’une des extensions autorisées dans notre script et cliquez sur le bouton Télécharger bouton.
Cela devrait soumettre le formulaire, et si tout se passe bien, vous devriez voir le fichier téléchargé dans le fichier. upload_files annuaire. Vous pouvez également essayer de télécharger d'autres fichiers avec des extensions non autorisées et vérifier si notre script empêche de tels téléchargements..
Aujourd'hui, nous avons discuté des bases du téléchargement de fichiers en PHP. Dans la première moitié de l'article, nous avons présenté les différentes options de configuration nécessaires pour que le téléchargement de fichiers fonctionne. Nous avons ensuite examiné un exemple concret montrant comment le téléchargement de fichiers fonctionne en PHP..
J'espère que vous avez apprécié cet article et n'hésitez pas à poster vos questions et suggestions ci-dessous!