Erreur de syntaxe PHP
Résolu/Fermé
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
-
15 juin 2012 à 00:16
Belokanfr Messages postés 19 Date d'inscription lundi 4 juillet 2011 Statut Membre Dernière intervention 28 juin 2012 - 15 juin 2012 à 17:05
Belokanfr Messages postés 19 Date d'inscription lundi 4 juillet 2011 Statut Membre Dernière intervention 28 juin 2012 - 15 juin 2012 à 17:05
A voir également:
- Erreur de syntaxe PHP
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3000 france tv - Forum Lecteurs et supports vidéo
- Erreur 3005 france tv - Forum TV & Vidéo
8 réponses
rodoplop
Messages postés
77
Date d'inscription
vendredi 16 septembre 2011
Statut
Membre
Dernière intervention
6 juillet 2012
12
15 juin 2012 à 00:35
15 juin 2012 à 00:35
Bonjour,
Tout d'abord, il faut savoir que l'upload de fichier en PHP est toujours contraignant à gérer.
En effet le PHP s'executant coté serveur, peut importe les contrôles effectués, le script essayera toujours d'uploader le fichier. C'est seulement quand le fichier ets uploadé que les contrôles sur la taille et l'extension peuvent être effectués.
Dans ton cas, lorsque tu dit que ca ne fonctionne pas, est ce que cela veut dire qu'il t'affiche toujours la page de succès ? (lorsque error = 0 ?)
ton contrôle sur le champ error n'est pas très bon mais le problème c'est surtout que tu fait tes contrôles uniquement à la fin de ton fichier.
de ce fait même si tu n'a pas la bonne extension ou si le fichier est trop volumineux, tu fait quand même le move_upload_file()
alors que cela ne devrait être fait que s'il n'y à pas eu d'erreur avant.
j'ia également ajouté un test sur le move_uploaded_file qui peut te renvoyer une erreur s'il n'arrive pas a modifier le fichier
Tout d'abord, il faut savoir que l'upload de fichier en PHP est toujours contraignant à gérer.
En effet le PHP s'executant coté serveur, peut importe les contrôles effectués, le script essayera toujours d'uploader le fichier. C'est seulement quand le fichier ets uploadé que les contrôles sur la taille et l'extension peuvent être effectués.
Dans ton cas, lorsque tu dit que ca ne fonctionne pas, est ce que cela veut dire qu'il t'affiche toujours la page de succès ? (lorsque error = 0 ?)
ton contrôle sur le champ error n'est pas très bon mais le problème c'est surtout que tu fait tes contrôles uniquement à la fin de ton fichier.
de ce fait même si tu n'a pas la bonne extension ou si le fichier est trop volumineux, tu fait quand même le move_upload_file()
alors que cela ne devrait être fait que s'il n'y à pas eu d'erreur avant.
<? // Taille maximum $MAX_FILE_SIZE = 100; // Dossier de destination du fichier $folder = "upload/"; // Tableau array des différents types $allowed_types = array( "image/bmp", "image/gif", "image/pjpeg", "image/jpeg", "image/jpg", "image/png", "image/tiff", "application/postscript", "image/psd", "application/x-shockwave-flash", "multipart/x-zip", "application/msword", "application/excel", "application/vnd.ms-powerpoint", "application/pdf", "text/html", "text/css", "audio/aiff", "audio/mpeg", "audio/wav", "audio/x-ms-wma", "video/msvideo", "video/avi", "video/mpeg", "video/x-ms-wmv" ); // Variables récupérées par méthode POST du formulaire $fname = $_FILES['fichier']['name']; $ftype = $_FILES ['fichier']['type']; $fsize = $_FILES ['fichier']['size']; $ftmp = $_FILES ['fichier']['tmp_name']; $extension_upload = substr( strrchr($_FILES['fichier']['name'], '.') ,1); // Divers tests afin de savoir si : // Le format de fichier correspond à notre tableau array if(!in_array($ftype, $allowed_types)) { echo("Format de fichier incorrecte."); } else if($fsize > $MAX_FILE_SIZE){ // La taille du fichier n'est pas dépassée echo("Fichier trop volumineux."); } else { // Si le fichier existe déjà if (file_exists('./upload/'.$fname)) { //Si le fichier existe, on rajoute dans son nom, la date et l'heure pour le différencier de la première (comme ça, on est sûr de ne pas avoir 2 images avec le même nom) $nom_final= preg_replace("'.$extension_upload'is",date("ldSFY-h.i.s- A").".$extension_upload",$fname); } else { $nom_final=$fname; //l'image n'existe pas on garde le même nom } //on déplace l'image dans le répertoire final if(move_uploaded_file($ftmp,'./upload/'.$nom_final)) { // Messages avec apostrophe $m1 = ' à l\'emplacement suivant : '; $m2 = htmlspecialchars($m1); echo("<h3>Fichier correctement envoyé !</h3>"); echo ('<br/>'); echo ('<br/>'); //L'image apparait après validation avec son nom, son emplacement, son type et son poids echo '<img src="./upload/'.$nom_final.'" border="0" />'; echo "<br/><br/>Le nom dorigine du fichier est '" . $fname . "'.<br/>"; echo "Le fichier a été téléchargé avec succès" . $m2 . '/upload/'.$nom_final . "'<br/>"; echo "Le type du fichier est '" . $ftype . "'.<br/>"; echo "La taille du fichier est de '" . $fsize . " octets'.<br/>"; echo '<a href="javascript:history.back();" align="center">Retour</a>'; } else { echo ("erreur lors du déplacement du fichier."); } } ?>
j'ia également ajouté un test sur le move_uploaded_file qui peut te renvoyer une erreur s'il n'arrive pas a modifier le fichier
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
15 juin 2012 à 00:39
15 juin 2012 à 00:39
Merci rodoplop pour ta réponse rapide !
J'essaye, et je fais un retour !
J'essaye, et je fais un retour !
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
Modifié par Belokanfr le 15/06/2012 à 00:48
Modifié par Belokanfr le 15/06/2012 à 00:48
Alors rodoplop, ça fonctionne impeccablement.
Mais je souhaite avoir quelques petites précisions :
tu as supprimé tous les $error pour mettre direct un echo avec le texte adéquate, mais n'était-il pas possible de garder les $error ?
Bon sinon, je suis ravi que tu ais pu m'aider, car cela faisait deux jours que j'étais dessus et mes idées n'étaient plus toutes claires !
MERCI !
Mais je souhaite avoir quelques petites précisions :
tu as supprimé tous les $error pour mettre direct un echo avec le texte adéquate, mais n'était-il pas possible de garder les $error ?
Bon sinon, je suis ravi que tu ais pu m'aider, car cela faisait deux jours que j'étais dessus et mes idées n'étaient plus toutes claires !
MERCI !
rodoplop
Messages postés
77
Date d'inscription
vendredi 16 septembre 2011
Statut
Membre
Dernière intervention
6 juillet 2012
12
15 juin 2012 à 14:54
15 juin 2012 à 14:54
Si bien sur tu peux garder ta variable error
en fait ton soucis vient plutôt de tes if.
tu fait bien tes test au début sur la taille de ton fichier et l'extension. Mais à la fin tu fait quand même le move_uploaded_file (même si tu as des erreurs sur la taille ou l'extension) et tu passe ta variable error à 0
du coup dans ton switch, error est toujours à 0 et la page de succès s'affiche.
de ce fait en gardant les if(){}else{} comme dans mon code tu n'a plus ce soucis, car tu ne fait le move que si tu n'a pas eu d'erreur avant.
le seul soucis avec une telle gestion d'erreur c'est que si je met un fichier trop gros et qui à une mauvaise extension, on affiche qu'une erreur à la fois.
Dans ce cas, il faudrait plutôt stocker tes erreurs dans un tableau $error[] et ensuite au lieu d'un switch, tu boucle sur ton tableau erreur pour afficher les messages correspondant.
Je ne suis pas très bon pour les explications, si tu souhaite encore de l'aide, n'hésite pas.
en fait ton soucis vient plutôt de tes if.
tu fait bien tes test au début sur la taille de ton fichier et l'extension. Mais à la fin tu fait quand même le move_uploaded_file (même si tu as des erreurs sur la taille ou l'extension) et tu passe ta variable error à 0
du coup dans ton switch, error est toujours à 0 et la page de succès s'affiche.
de ce fait en gardant les if(){}else{} comme dans mon code tu n'a plus ce soucis, car tu ne fait le move que si tu n'a pas eu d'erreur avant.
le seul soucis avec une telle gestion d'erreur c'est que si je met un fichier trop gros et qui à une mauvaise extension, on affiche qu'une erreur à la fois.
Dans ce cas, il faudrait plutôt stocker tes erreurs dans un tableau $error[] et ensuite au lieu d'un switch, tu boucle sur ton tableau erreur pour afficher les messages correspondant.
Je ne suis pas très bon pour les explications, si tu souhaite encore de l'aide, n'hésite pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
15 juin 2012 à 15:27
15 juin 2012 à 15:27
Bonjour rodoplop,
effectivement, j'ai procédé comme tu le dis et je me suis appuyé sur ce que tu as poster pour remettre mon code à ma sauce avec les $error 1, 2 et 3.
Tes explications sont très clairs, et j'ai pu effectivement, grâce à ton intervention, voir où le code ne fonctionnait pas.
Maintenant, je dois essayer de trouver comment faire pour supprimer les espaces dans un fichier qui serait uploader, c'est à dire :
"nom du fichier" en "nomdufichier".
Merci pour ton intervention qui me fût d'une grande aide précieuse !
effectivement, j'ai procédé comme tu le dis et je me suis appuyé sur ce que tu as poster pour remettre mon code à ma sauce avec les $error 1, 2 et 3.
Tes explications sont très clairs, et j'ai pu effectivement, grâce à ton intervention, voir où le code ne fonctionnait pas.
Maintenant, je dois essayer de trouver comment faire pour supprimer les espaces dans un fichier qui serait uploader, c'est à dire :
"nom du fichier" en "nomdufichier".
Merci pour ton intervention qui me fût d'une grande aide précieuse !
rodoplop
Messages postés
77
Date d'inscription
vendredi 16 septembre 2011
Statut
Membre
Dernière intervention
6 juillet 2012
12
15 juin 2012 à 16:14
15 juin 2012 à 16:14
Le plus simple pour ça c'est d'utiliser la fonction srt_replace
str_replace(' ', '', $maVar);
elle remplace les espace présent dans $maVar par "rien". Cela te supprime donc tes espaces.
Par contre pour un soucis de facilité de lecture, je te recommande de ne pas remplacer les espaces par du vide mais plutôt de les remplacer par un underscore
str_replace(' ', '_', $maVar);
De ce fait tu n'as plus le problème des espace et tes fichiers reste plus simple à lire !
str_replace(' ', '', $maVar);
elle remplace les espace présent dans $maVar par "rien". Cela te supprime donc tes espaces.
Par contre pour un soucis de facilité de lecture, je te recommande de ne pas remplacer les espaces par du vide mais plutôt de les remplacer par un underscore
str_replace(' ', '_', $maVar);
De ce fait tu n'as plus le problème des espace et tes fichiers reste plus simple à lire !
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
15 juin 2012 à 16:50
15 juin 2012 à 16:50
Merci rodoplop, je tente et je fais un retour
Belokanfr
Messages postés
19
Date d'inscription
lundi 4 juillet 2011
Statut
Membre
Dernière intervention
28 juin 2012
Modifié par Belokanfr le 15/06/2012 à 17:06
Modifié par Belokanfr le 15/06/2012 à 17:06
Re !
Donc effectivement, ça fonctionne parfaitement !
Et c'est bien vu, du coup, lorsqu'il existe un doublon sur le serveur, on rajoute la date, et j'ai rajouté un underscore avant celle-ci de façon à ce qu'on distingue bien la date du nom du fichier !
Un grand merci !!!
Je poste tout de même l'évolution, si ça peut servir :
Encore un grand MERCI !!!
Donc effectivement, ça fonctionne parfaitement !
Et c'est bien vu, du coup, lorsqu'il existe un doublon sur le serveur, on rajoute la date, et j'ai rajouté un underscore avant celle-ci de façon à ce qu'on distingue bien la date du nom du fichier !
Un grand merci !!!
Je poste tout de même l'évolution, si ça peut servir :
if (file_exists('./upload/'.$fname)) { //Si le fichier existe, on rajoute dans son nom, la date et l'heure pour le différencier de la première (comme ça, on est sûr de ne pas avoir 2 images avec le même nom) $nom_final= preg_replace("'.$extension_upload'is",date("_ldSFY-h.i.s- A").".$extension_upload",$fname); $nom_final = str_replace(' ', '_', $nom_final); } else { $nom_final=$fname; //l'image n'existe pas on garde le même nom }
Encore un grand MERCI !!!