PHP \ Interaction avec le système de fichier
anatolekadel
Messages postés
102
Date d'inscription
Statut
Membre
Dernière intervention
-
le père -
le père -
Bonjour, je débute en programmation Web. J'ai besoin de faire un petit script qui upload simplement une photo de l'utilisateur à un répertoire précis de mon serveur. Rien de bien compliqué en somme. Toutefois, je suis confronté à une erreur. J'imagine qu'elle est toute bête, mais là, j'abandonne, j'ai besoin de votre aide...
Voilà le code qui gère les images:
L'erreur vient apparement du move_uploaded_file, car il m'affiche le message "Impossible d'enregistrer la photo dans l'album. J'ai cherché les renseignements de cette fonction (notamment sur le site php.net). Mais rien n'y fait; je ne comprends pas trop ce qui ne va pas. Je pense que ce sont les configurations de mon serveur qui sont mauvaises...
-J'ai un serveur Windows. J'ai vérifier d'avoir les droits d'écriture et de lecture du dossier Content.
-Concernant le répertoire temporaire de PHP, j'ai laissé vide, car il me semble que le répertoire temporaire devient alors celui par défaut...
Donc, d'où vient l'erreur ?
PS: Mon fichier de test est : test.jpg
Voilà le code qui gère les images:
<?php if ($_FILES['photoAjout']['error'] > 0) { echo 'Problème : '; switch ($_FILES['photoAjout']['error']) { case 1: echo 'Le fichier est trop lourd, il ne doit pas dépassé les 10 Mo...'; break; case 2: echo 'Le fichier dépasse les 10 Mo'; break; case 3: echo 'Dépôt de photo incomplet'; break; case 4: echo 'Le dépôt n\'a pas été effectué'; break; case 5: echo 'Dépôt impossible, vous n\'avez pas renseigné le répertoire temporaire'; break; case 6: echo 'Echec du dépôt: impossible d\'écrire sur le disque'; break; } exit; } $fichier = 'content/'.$_FILES['photoAjout']['name'] ; if (is_uploaded_file($_FILES['photoAjout']['tmp_name'])) { if (!move_uploaded_file($_FILES['photoAjout']['tmp_name'], $fichier)) { echo 'Impossible d\'enregistrer la photo dans l\'album'; exit; } } else { echo 'Problème: Attaque possible par le fichier'; echo $_FILES['photoAjout']['name']; exit; } echo 'Le fichier a été correctement ajouté.<br></hr>'; $contenu = file_get_contents($_fichier); $contenu = strip_tags($contenu); file_put_contents($contenu); fclose ($fp); echo $contenu.'<br></hr>'; ?>
L'erreur vient apparement du move_uploaded_file, car il m'affiche le message "Impossible d'enregistrer la photo dans l'album. J'ai cherché les renseignements de cette fonction (notamment sur le site php.net). Mais rien n'y fait; je ne comprends pas trop ce qui ne va pas. Je pense que ce sont les configurations de mon serveur qui sont mauvaises...
-J'ai un serveur Windows. J'ai vérifier d'avoir les droits d'écriture et de lecture du dossier Content.
-Concernant le répertoire temporaire de PHP, j'ai laissé vide, car il me semble que le répertoire temporaire devient alors celui par défaut...
Donc, d'où vient l'erreur ?
PS: Mon fichier de test est : test.jpg
A voir également:
- PHP \ Interaction avec le système de fichier
- Fichier bin - Guide
- Restauration systeme windows 10 - Guide
- Fichier epub - Guide
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
9 réponses
Bonjour
Effectivement, ça a l'air correct.
Le dossier 'content' est-il bien un sous-dossier de celui qui contient ton script ?
Ajoute error_reporting(E_ALL); au début de ton script, ça devrait t'afficher un message de warning qui en dira peut-être un peu plus sur le problème
D'autre part, et sans rapport avec le problème de move_uploaded_file, le file_put_contents($contenu); risque de te décevoir si tu comptes afficher ton image comme ça.
Effectivement, ça a l'air correct.
Le dossier 'content' est-il bien un sous-dossier de celui qui contient ton script ?
Ajoute error_reporting(E_ALL); au début de ton script, ça devrait t'afficher un message de warning qui en dira peut-être un peu plus sur le problème
D'autre part, et sans rapport avec le problème de move_uploaded_file, le file_put_contents($contenu); risque de te décevoir si tu comptes afficher ton image comme ça.
Merci d'avoir répondu.
-Donc, 'content' est bien un sous-dossier du dossier qui contient mon script.
-C'est vrai, j'avais fait un copié-collé d'un autre script; c'est pour ça que j'avais un file_put_contents ^^ Mais, j'ai retiré tout ça...
-Donc, je vais ajouter le error_reporting pour voir ce qu'il en est.
-Donc, 'content' est bien un sous-dossier du dossier qui contient mon script.
-C'est vrai, j'avais fait un copié-collé d'un autre script; c'est pour ça que j'avais un file_put_contents ^^ Mais, j'ai retiré tout ça...
-Donc, je vais ajouter le error_reporting pour voir ce qu'il en est.
tu n'uarai pas une erreur de lettre ici?
is_uploaded_file
;)
is_uploaded_file
;)
D'après le manuel PHP, si move_uploaded_file n'affiche pas d'avertissement mais rend FALSE, c'est que le premier paramètre est incorrect.
Peux-tu montrer le formulaire de téléchargement ? il ne te manquerait pas un
Tu peux aussi faire un echo ($_FILES['photoAjout']['error']) (juste avant le exit)
Peux-tu montrer le formulaire de téléchargement ? il ne te manquerait pas un
enctype="multipart/form-data"dans ta balise <FORM> ?
Tu peux aussi faire un echo ($_FILES['photoAjout']['error']) (juste avant le exit)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question<form action="../scriptAjoutphoto.php" method="post" enctype="multipart/form-data" name="ajout"> <label for="cat">Sélectionnez un album: </label> <?php include ("../scriptCat.php"); ?><br> <label for="photoAjout">Sélectionnez une photo:</label> <input type="hidden" name="MAX_FILE_SIZE" value="10000000"/> <input type="file" name="photoAjout" id="photoAjout"/><br> <input type="submit" value="Ajouter photo"/> </form>
Voilà mon formulaire (ScriptCat, c'est juste pour faire une liste déroulante d'albums)
Pour le
$_FILES['photoAjout']['error'], il m'affiche un 0.
Mais, je m'inquiète plus pour les configurations de PHP que pour mes scripts; à quoi dois-je faire attention ?
Il n'y a rien de spécial à configurer pour pouvoir télécharger. Il y a bien un répertoire temporaire et la taille max, mais si tu n'as rien 'bricolé' ça devrait marcher. Et si tu essayais un fichier trop gros, tu aurais un message d'erreur...
move_uploaded_file te rend false, mais n'affiche aucun warning et laisse $_FILES['photoAjout']['error'] à 0 (pas d'erreur). C'est absurde.
Je fais l'essai chez moi
move_uploaded_file te rend false, mais n'affiche aucun warning et laisse $_FILES['photoAjout']['error'] à 0 (pas d'erreur). C'est absurde.
Je fais l'essai chez moi
J'ai essayé. Ça marche, et si je crée volontairement des problèmes (par exemple en dévalidant le téléchargement) j'ai toujours un message d'avertissement.
Je commence vraiment à sécher...
Je commence vraiment à sécher...
Ben, comme je l'ai dit, ça doit être mes configurations de PHP qui ne fonctionnent pas. Voilà mes configs (celle concernant l'upload dans php.ini):
Est-ce qu'il faut changer quelque chose ?
;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use system default if not ; specified). ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 20M ; Maximum number of files that can be uploaded via a single request max_file_uploads = 20
Est-ce qu'il faut changer quelque chose ?