Upload de fichier

Eléphanteau du PHP | 14 Messages

22 déc. 2010, 04:16

Bonjour à tous,

Je me remet à nouveau à php et j'ai trois questions concernant les transfert de fichier.

Premièrement, à propos de la fonction move_uploaded_file. D'après un de mes livres, si tout se passe bien, il est censé retourner TRUE. Seulement, dans mes tests cela ne marche pas. Le code suivant ne marche pas correctement :

Code : Tout sélectionner

$result=move_uploaded_file($_FILES['fich']['tmp_name'],"test.zip"); if($result==TRUE){ echo "Le transfert a été réalisé"; }else{ echo "Transfert à échoué, erreur n°",$_FILES['fich']['error']; }
Pourtant on voit bien que le code d'erreur est à 0, autrement dit que le transfert s'est bien passé. J'ai donc fait la modification pour faire le test avec le code d'erreur directement.


Ensuite, j'ai essayé dans le code html du formulaire de limiter les types de fichiers acceptés, mais ça ne marche pas non plus. Voici la portion du code :

Code : Tout sélectionner

<input type="file" name="fich" size="50" /> <input type="hidden" name="MAX_FILE_SIZE" accept="application/zip" value="1000000"/>

Et dernière question, à laquelle je n'ai pas trouvé de solutions alternatives :
Je travaille en local et quand je transfère le fichier via la fonction move_uploaded_file, je ne le retrouve pas à l'endroit voulu et nulle part ailleurs.


Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 déc. 2010, 05:43

salut,

$_FILES['fich']['error'] === 0 et le fait que move_uploaded_file retourne false ne sont pas du tout la même chose.

Le premier indique que le serveur à bien reçu un fichier du client sans soucis.
Ce fichier est dans le répertoire temporaire du serveur jusqu’à la fin du script sauf si tu le déplace avant.

si move_uploaded_file retourne une erreur c'est que soit le fichier d'origine n'existe pas, soit n'est pas téléchargé par http, soit qu'il n'a pas les droit en lecture ou écriture.

normalement il doit y avoir un message d'erreur qui s'affiche, sauf si l'error_reporting est désactivé.

pour ce qui est d'éventuelle limitation par le script "c'est du flan" le formulaire étant modifable tu ne peu prévoir le fichier qui va t'être soumis et seule la vérification en php compte.
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 14 Messages

23 déc. 2010, 01:09

Ah oui, c'est vrai. Merci pour ces réponses.

Je viens déjà d'activer display_errors et effectivement j'ai cet erreur suivant :
Warning: move_uploaded_file(/home/kajan/monfichier.zip): failed to open stream: Permission denied in /var/www/exos_engel/ch6/exo7.php on line 5 Warning: move_uploaded_file(): Unable to move '/tmp/phpZU2flC' to '/home/kajan/monfichier.zip' in /var/www/exos_engel/ch6/exo7.php on line 5

Je vais essayer de corriger ça. Je devrais changer les droits d'accès du fichier c'est ça?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

23 déc. 2010, 01:36

oula oui c'est même certain le problème la, tu ne peut pas déplacer quelque chose en dehors du contexte du serveur web, ce serait un gros problème de sécurité (imagine ce qui pourrait se passer si l'on aller taper dans les fichiers systèmes).

donc le fichier est doit être déplacer dans le www. si tu tiens à faire autrement il faut donner les droits explicite à l'utilisateur qui fait tourner apache ;)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 14 Messages

23 déc. 2010, 19:18

C'et bon ça marche maintenant. Effectivement le pb était au niveau des droits.
En tout cas merci d'avoir un newby, lol