PHP \ Interaction avec le système de fichier

anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   -  
 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:

<?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:

9 réponses

le père
 
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.
0
anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   3
 
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.
0
anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   3
 
J'ai ajouté :
error_reporting(E_ALL);
juste après le
<?php
. J'ai lancé mon script; et ça ne m'a rien affiché de plus...
0
graffx Messages postés 6506 Date d'inscription   Statut Contributeur Dernière intervention   1 975
 
tu n'uarai pas une erreur de lettre ici?

is_uploaded_file

;)

0
anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   3
 
0
le père
 
tu n'uarai pas une erreur de lettre ici?
^^ sans oublier le 's' à aurais !!!
0
le père
 
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
enctype="multipart/form-data"
dans ta balise <FORM> ?

Tu peux aussi faire un echo ($_FILES['photoAjout']['error']) (juste avant le exit)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   3
 
<form action="../scriptAjoutphoto.php" method="post" enctype="multipart/form-data" name="ajout">
      <label for="cat">Sélectionnez un album:&nbsp;</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 ?
0
le père
 
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
0
le père
 
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...
0
anatolekadel Messages postés 102 Date d'inscription   Statut Membre Dernière intervention   3
 
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):

;;;;;;;;;;;;;;;;
; 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 ?
0
le père
 
J'ai exactement la même chose.
0