Dans PHP, le téléchargement de fichiers est une exigence très courante. Grâce à la fonction move_uploaded_file () , nous pouvons déplacer en toute sécurité les fichiers téléchargés du dossier temporaire vers le répertoire cible spécifié, réalisant ainsi la gestion des fichiers. Cet article présentera comment combiner la fonction move_uploaded_file () pour créer un système de gestion de fichiers simple et pratique.
MOVE_UPLOADED_FILE () est une fonction intégrée en PHP pour déplacer des fichiers téléchargés des répertoires temporaires vers les répertoires cibler. La syntaxe est la suivante:
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$filename</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$destination</span></span><span> )
</span></span>
$ nom de fichier : indique le chemin de fichier temporaire vers le fichier de téléchargement à déplacer.
$ Destination : représente le chemin de destination vers le fichier enregistré final.
Cette fonction ne peut être exécutée avec succès que si le fichier est téléchargé via la publication HTTP et que le fichier temporaire existe. Si le fichier téléchargé est illégal ou si le chemin cible n'est pas ravi, la fonction renvoie false .
Tout d'abord, nous devons créer un formulaire HTML simple à travers lequel les utilisateurs peuvent télécharger des fichiers. L'exemple de code est le suivant:
<span><span><span class="hljs-tag"><<span class="hljs-name">form</span></span></span><span> </span><span><span class="hljs-attr">action</span></span><span>=</span><span><span class="hljs-string">"upload.php"</span></span><span> </span><span><span class="hljs-attr">method</span></span><span>=</span><span><span class="hljs-string">"post"</span></span><span> </span><span><span class="hljs-attr">enctype</span></span><span>=</span><span><span class="hljs-string">"multipart/form-data"</span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">label</span></span></span><span> </span><span><span class="hljs-attr">for</span></span><span>=</span><span><span class="hljs-string">"file"</span></span><span>>Sélectionner le téléchargement de fichiers:</span><span><span class="hljs-tag"></<span class="hljs-name">label</span></span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">input</span></span></span><span> </span><span><span class="hljs-attr">type</span></span><span>=</span><span><span class="hljs-string">"file"</span></span><span> </span><span><span class="hljs-attr">name</span></span><span>=</span><span><span class="hljs-string">"file"</span></span><span> </span><span><span class="hljs-attr">id</span></span><span>=</span><span><span class="hljs-string">"file"</span></span><span>>
</span><span><span class="hljs-tag"><<span class="hljs-name">input</span></span></span><span> </span><span><span class="hljs-attr">type</span></span><span>=</span><span><span class="hljs-string">"submit"</span></span><span> </span><span><span class="hljs-attr">value</span></span><span>=</span><span><span class="hljs-string">"Télécharger le fichier"</span></span><span>>
</span><span><span class="hljs-tag"></<span class="hljs-name">form</span></span></span><span>>
</span></span>
Dans ce formulaire, ENCTYPE = "Multipart / Form-Data" spécifie le type de données du formulaire afin que le fichier puisse être téléchargé correctement. type = "fichier" dans la balise d'entrée est utilisé pour permettre à l'utilisateur de sélectionner un fichier.
Dans le script de traitement pour les téléchargements de fichiers (tels que upload.php ), nous utiliserons move_uploaded_file () pour déplacer le fichier d'un emplacement temporaire vers le dossier de destination spécifié.
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Répertoire de téléchargement</span></span><span>
</span><span><span class="hljs-variable">$uploadDir</span></span><span> = </span><span><span class="hljs-string">'uploads/'</span></span><span>;
</span><span><span class="hljs-comment">// Vérifiez si le dossier cible existe,Créer s'il n'existe pas</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_dir</span></span><span>(</span><span><span class="hljs-variable">$uploadDir</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">mkdir</span></span><span>(</span><span><span class="hljs-variable">$uploadDir</span></span><span>, </span><span><span class="hljs-number">0755</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
}
</span><span><span class="hljs-comment">// Vérifiez s'il y a des téléchargements de fichiers</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>]) && </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'error'</span></span><span>] == </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-comment">// 获取Télécharger le fichier的信息</span></span><span>
</span><span><span class="hljs-variable">$fileName</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'name'</span></span><span>]; </span><span><span class="hljs-comment">// nom de fichier</span></span><span>
</span><span><span class="hljs-variable">$fileTmpName</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'tmp_name'</span></span><span>]; </span><span><span class="hljs-comment">// Chemin de fichier temporaire</span></span><span>
</span><span><span class="hljs-variable">$fileSize</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'size'</span></span><span>]; </span><span><span class="hljs-comment">// Taille de fichier</span></span><span>
</span><span><span class="hljs-variable">$fileType</span></span><span> = </span><span><span class="hljs-variable">$_FILES</span></span><span>[</span><span><span class="hljs-string">'file'</span></span><span>][</span><span><span class="hljs-string">'type'</span></span><span>]; </span><span><span class="hljs-comment">// Type de fichier</span></span><span>
</span><span><span class="hljs-comment">// Définir le chemin du fichier cible</span></span><span>
</span><span><span class="hljs-variable">$destination</span></span><span> = </span><span><span class="hljs-variable">$uploadDir</span></span><span> . </span><span><span class="hljs-title function_ invoke__">basename</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);
</span><span><span class="hljs-comment">// 检查Taille de fichier(Par exemple, la limite de fichiers maximale est 5MB)</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$fileSize</span></span><span> > </span><span><span class="hljs-number">5</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span> * </span><span><span class="hljs-number">1024</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fichier trop grand,Maximum autorisé 5MB。"</span></span><span>;
</span><span><span class="hljs-keyword">exit</span></span><span>;
}
</span><span><span class="hljs-comment">// Déplacer les fichiers vers le répertoire cibler</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">move_uploaded_file</span></span><span>(</span><span><span class="hljs-variable">$fileTmpName</span></span><span>, </span><span><span class="hljs-variable">$destination</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Télécharger le fichier avec succès!nom de fichier:"</span></span><span> . </span><span><span class="hljs-title function_ invoke__">htmlspecialchars</span></span><span>(</span><span><span class="hljs-variable">$fileName</span></span><span>);
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le téléchargement de fichiers a échoué!"</span></span><span>;
}
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Aucune erreur de téléchargement de fichiers ou de téléchargement de fichiers!"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans le code ci-dessus, nous vérifions d'abord s'il y a des téléchargements de fichiers et vérifions s'il y a des erreurs pendant le processus de téléchargement. Nous obtenons ensuite le chemin temporaire et le nom du fichier du fichier et spécifions le dossier cible ( uploads / ) comme l'emplacement de stockage final du fichier. Si le dossier cible n'existe pas, le script créera automatiquement le dossier.
Ensuite, nous utilisons la fonction move_uploaded_file () pour déplacer le fichier du chemin temporaire vers le dossier cible. Si le mouvement réussit, le script publiera un message de réussite.
Au-dessus de la fonction de téléchargement de fichiers de base, nous pouvons améliorer davantage les fonctions du système de gestion des fichiers et fournir les opérations communes suivantes:
Vous pouvez répertorier tous les fichiers téléchargés en lisant la liste de fichiers dans le répertoire cible:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff</span></span><span>(</span><span><span class="hljs-title function_ invoke__">scandir</span></span><span>(</span><span><span class="hljs-variable">$uploadDir</span></span><span>), </span><span><span class="hljs-keyword">array</span></span><span>(</span><span><span class="hljs-string">'..'</span></span><span>, </span><span><span class="hljs-string">'.'</span></span><span>));
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<ul>"</span></span><span>;
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<li><a href='<span class="hljs-subst">{$uploadDir}</span></span></span><span><span class="hljs-subst">{$file}</span></span><span>'></span><span><span class="hljs-subst">{$file}</span></span><span></a></li>";
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"</ul>"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Ce code utilise la fonction scandir () pour obtenir tous les fichiers dans le répertoire et filtrer . et .. , puis affiche le nom de fichier en tant qu'hyperlien.
Nous pouvons également fournir la fonction de supprimer des fichiers. En cliquant sur le lien de suppression, l'utilisateur peut supprimer le fichier spécifié:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'delete'</span></span><span>])) {
</span><span><span class="hljs-variable">$fileToDelete</span></span><span> = </span><span><span class="hljs-variable">$uploadDir</span></span><span> . </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'delete'</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$fileToDelete</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">unlink</span></span><span>(</span><span><span class="hljs-variable">$fileToDelete</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fichier supprimé: "</span></span><span> . </span><span><span class="hljs-variable">$_GET</span></span><span>[</span><span><span class="hljs-string">'delete'</span></span><span>];
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Le fichier n'existe pas!"</span></span><span>;
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Dans la liste des fichiers, nous fournissons un lien de suppression pour chaque fichier et l'opération de suppression sera déclenchée après avoir cliqué. La fonction Unlink () est utilisée pour supprimer les fichiers.
Le renom sur le fichier est également une opération courante dans les systèmes de gestion de fichiers. Nous pouvons fournir une fonction de renommée pour les fichiers:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'rename'</span></span><span>]) && </span><span><span class="hljs-keyword">isset</span></span><span>(</span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'new_name'</span></span><span>])) {
</span><span><span class="hljs-variable">$oldFile</span></span><span> = </span><span><span class="hljs-variable">$uploadDir</span></span><span> . </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'rename'</span></span><span>];
</span><span><span class="hljs-variable">$newFile</span></span><span> = </span><span><span class="hljs-variable">$uploadDir</span></span><span> . </span><span><span class="hljs-variable">$_POST</span></span><span>[</span><span><span class="hljs-string">'new_name'</span></span><span>];
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">rename</span></span><span>(</span><span><span class="hljs-variable">$oldFile</span></span><span>, </span><span><span class="hljs-variable">$newFile</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Fixer Renommer avec succès!"</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Renommer a échoué!"</span></span><span>;
}
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
En soumettant un formulaire, l'utilisateur peut spécifier un nouveau nom de fichier pour le fichier. La fonction Rename () modifie le fichier de l'ancien nom en nouveau nom.
En combinant la fonction move_uploaded_file () , PHP peut implémenter un système de gestion de fichiers simple et pratique. Ce système prend non seulement en charge le téléchargement de fichiers, mais fournit également des opérations communes telles que la liste de fichiers, la suppression et le renommage. Lors de la mise en œuvre d'un système de gestion de fichiers, nous devons nous assurer que les autorisations du dossier cible sont définies correctement et que la taille du fichier, le type, etc. sont vérifiées de manière appropriée pour améliorer la sécurité et la stabilité du système.
Grâce aux étapes ci-dessus, vous pouvez rapidement créer un système de téléchargement de fichiers et de gestion de base et développer davantage plus de fonctions en fonction de vos besoins.