Web Development Knowledge Base
| |
Sections :
RSS Feed You too, please publish your useful code snippets in any programming language : write an article ! Plateforme d'envoi de gros fichiers en ligne Dépannage site web Blog infogérance Hébergement e-mail |
Aurélie Dufour - - 20/03/2008 - vue 9027 fois
Upload de fichiers sécurisé en PHPCette fonction php permet l'envoi de fichiers via un formulaire HTML classique ; elle effectue plusieurs tests sur le fichier sélectionné avant de l'envoyer (extension du fichier, taille maximale autorisée, caractères spéciaux...). UPDATE : Il existe un service gratuit nommé Simple File Upload qui vient se greffer sur un script PHP existant et permet l'upload de fichiers lourds en contournant les limitations de son hébergeur. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Upload sécurisé de fichiers en PHP</title> <style type="text/css"> body{ font-family: Arial, Helvetica, sans-serif; font-size: 10pt; } </style> </head> <body> <form method="post" action="index.php" enctype="multipart/form-data"> <input name="fichier" type="file"><br /><br /> <input type="submit" name="envoyer" value="Envoyer"> <br /><br /> <i>Vous pouvez joindre un fichier au format DOC, RTF, PDF, ou TXT.</i> </fieldset> </form> <?php //si clic sur le bouton "envoyer"... if(isset($_POST['envoyer'])) { //on fait une série de tests sur le fichier : si une erreur est levée, on l'affiche puis on sort du programme //test si un fichier a bien été transmis (si le champ d'envoi de fichier n'a pas été laissé vide) if($_FILES['fichier']['size']<=0) { $alerte = 'Aucun fichier n\'a été sélectionné !\n'; echo "<script type=\"text/javascript\">alert(\"$alerte\");</script>"; exit; } //interception des erreurs qui peuvent arriver if($_FILES['fichier']['error']>0) { $alerte = 'Erreur lors du transfert du fichier...\n'; echo "<script type=\"text/javascript\">alert(\"$alerte\");</script>"; exit; } //le fichier ne doit pas excéder 1 Mo if($_FILES['fichier']['size']>1024000) { $alerte = 'Votre fichier dépasse la limite autorisée (1 Mo) !\n'; echo "<script type=\"text/javascript\">alert(\"$alerte\");</script>"; exit; } //tableau avec les extensions autorisées pour le fichier $ext_allow = array('doc','pdf','rtf','txt'); //on récupère l'extension du fichier envoyé par le formulaire $ext_file = strtolower(substr(strrchr($_FILES['fichier']['name'],'.'),1)); //on vérifie que l'extension du fichier envoyé est bien autorisée //c'est-à-dire qu'on la retrouve dans le tableau $ext_allow //sinon on affiche un message d'alerte if(!in_array($ext_file,$ext_allow) && $_FILES['fichier']['size'] > 0){ $alerte = 'Votre fichier n\'est pas autorisé (pas au format DOC, PDF, RTF ou TXT) !\n'; echo "<script type=\"text/javascript\">alert(\"$alerte\");</script>"; } //à ce stade tout est bon : on transfère le fichier vers le serveur, dans le bon répertoire else { //on remplace les caractères spéciaux du nom du fichier par des caractères standards $search = array ('@[ËÊÈÉéèëê]@i','@[ÄÂÀÁäâàá]@i','@[ÏÎÌÍïîìí]@i','@[ÜÛÙÚüûùúµ]@i','@[ÖÔÒÓöôòó]@i','@[ç]@i','@[ñ]@i','@[ \'"]@i'); $replace = array ('e','a','i','u','o','c','n','_'); $_FILES['fichier']['name'] = preg_replace($search, $replace, $_FILES['fichier']['name']); //le répertoire vers lequel on souhaite transférer le fichier : //si le dossier n'existe pas, on le crée : $rep = 'monDossier/'; if(!is_dir($rep))mkdir($rep); //on teste si le fichier n'existe pas déjà dans notre dossier : if(file_exists($rep.$_FILES['fichier']['name'])) { //s'il existe déjà, on affiche une alerte JS echo "<script type=\"text/javascript\">alert(\"Le nom : ".$_FILES['fichier']['name']." a déjà été choisi par quelqu'un d'autre !\\n Veuillez en trouver un autre svp...\");</script>"; } //sinon tout est OK et on peut enfin enregistrer le document sur le serveur else{ if((in_array($ext_file,$ext_allow))&&($_FILES['fichier']['size'] > 0)&&(move_uploaded_file($_FILES['fichier']['tmp_name'],$rep.$_FILES['fichier']['name']))) { //message de confirmation JS, comme quoi le fichier est bien enregistré sur le serveur echo "<script type=\"text/javascript\">alert(\"Votre fichier a bien été enregistré !\");</script>"; } //sinon, il y a un problème lors de l'envoi (vitesse de connexion trop lente par exemple), donc on affiche un message d'erreur else echo "<script type=\"text/javascript\">alert(\"Une erreur s'est produite lors du transfert de votre fichier...\");</script>"; } } } ?> </body> </html>
Xarnax - 05/07/2008
Pour les professionnels, il existe des solutions d'upload de gros fichiers permettant d'avoir sa propre plateforme de stockage personnalisée.
|
Nos partenaires : iPhone 8 Cases & Protection |