probleme avec upload via php

Eléphant du PHP | 57 Messages

31 août 2009, 10:02

Bonjour,

je suis face à un problème qui me titille depuis une semaine... Je dois créer un espace où les gens peuvent uploader leur fichiers de la façon la plus simple qui soit. Avec beaucoup de recherches et de tests de code, j'ai pour certitude que les données sont uploadées mais pas déplacées vers le répertoire dans lequel je veux les voir. Pour le vérifier j'ai donc fait un petit phpinfo() et je vois ça :

upload_tmp_dir - no value

Que puis-je faire?

Merci d'avance.

ViPHP
ViPHP | 4039 Messages

31 août 2009, 10:16

Tout est bon niveau droits d'accès, sur le serveur, dans les répertoires concernés ?
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 août 2009, 10:17

Bonjour,

Je pencherais plus vers un des ces problèmes : répertoire de destination inaccessible en écriture pour le serveur web ou chemin(s) incorrect(s).

edit : grilled

Eléphant du PHP | 57 Messages

31 août 2009, 10:26

Merci tout d'abord pour vos réponses rapides.

charabia : concrétement je peux faire quoi si c'est bien ça?

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 août 2009, 10:32

Rectifier les droits d'accès sur le répertoire en question et vérifier que le chemin est le bon.

Eléphant du PHP | 57 Messages

31 août 2009, 10:39

bon, je viens de faire le test de la mort : vérifier mes autorisations et je n'arrive pas à changer le chmod de mon répertoire avec filezilla, j'imagine donc qu'il y a des restrictions de mon hébergeur....

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 août 2009, 10:43

c'est possible en effet. Quels sont les droits actuels ?

Eléphant du PHP | 57 Messages

31 août 2009, 11:00

J'ai un chmod de 755.

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 août 2009, 11:10

ah avec un 755 ça devrait fonctionner normalement. Vérifies dans ce cas le chemin pour voir s'il est correct.

Eléphant du PHP | 57 Messages

31 août 2009, 11:34

Voilà le code de mon formulaire qui renvoie le fichier upload.php :
<FORM method="POST" action="[upload.php]" ENCTYPE="multipart/form-data">
          <INPUT type=hidden name=MAX_FILE_SIZE  VALUE=2048>
          <INPUT type=file name="nom_du_fichier">
          <INPUT type=submit value="Envoyer">
</FORM>
et pour avoir les infos du chemin j'ai fait ça :
<pre><?  print_r($_FILES); ?></pre>
au final j'ai comme retour :

Array
(
[nom_du_fichier] => Array
(
[name] => monimage.jpg
[type] =>
[tmp_name] =>
[error] => 2
[size] => 0
)

)


j'arrive pas à avoir le nom du chemin...

Avatar du membre
ViPHP
ViPHP | 3008 Messages

31 août 2009, 11:44

L'erreur "2" correspond au dépassement du poids autorisé. Tu permets l'upload de fichier de 2ko max.

Et c'est quoi ces accolades dans le form ?

Sinon ton code n'est pas très conforme, n'oublies pas les guillemets, mets en minuscules...etc

Utilises <?php ... ?> et non <? ... ?>

Eléphant du PHP | 57 Messages

31 août 2009, 13:04

effectivement je n'avais pas vu pour la taille des fichiers !

après correction a commande print_r me retourne ceci

Array
(
[nom_du_fichier] => Array
(
[name] => mon image.jpg
[type] => image/jpeg
[tmp_name] => C:\WINDOWS\Temp\php39F.tmp
[error] => 0
[size] => 146198
)
)


ça y est j'ai mon chemin mais je suis pas vraiment sûr de pouvoir exploiter cette donnée correctement puisqu'il s'agit d'un chemin sur un disque, non?

Mammouth du PHP | 985 Messages

31 août 2009, 13:10

Array
(
    [nom_du_fichier] => Array
        (
            [name] => 'mon image.jpg',
            [type] => 'image/jpeg',
            [tmp_name] => 'C:\WINDOWS\Temp\php39F.tmp',
            [error] => 0,
            [size] => 146198,
        )
)
Déjà mais sans vouloir être chiant:
Sous balises Php, c'est plus lisible et surtout entre ' et , c'est plus Safe...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 369 Messages

31 août 2009, 13:22

Salut,
effectivement je n'avais pas vu pour la taille des fichiers !

après correction a commande print_r me retourne ceci

Array
(
[nom_du_fichier] => Array
(
[name] => mon image.jpg
[type] => image/jpeg
[tmp_name] => C:\WINDOWS\Temp\php39F.tmp
[error] => 0
[size] => 146198
)
)


ça y est j'ai mon chemin mais je suis pas vraiment sûr de pouvoir exploiter cette donnée correctement puisqu'il s'agit d'un chemin sur un disque, non?
Ton problème est résolu... si, si ;)
La clef tmp_name est celle que tu dois indiquer à ta fonction de transfert.

Ce qui peut s'écire ainsi:
// ou DEFINE_FILE est le nom de la clef <nom_du_fichier> contenu dans ton form.
// ou $strDirectory est ton path [*]
// .
// .
// .
$arrayFiles = $_FILES[DEFINE_FILE];

move_uploaded_file($arrayFiles['tmp_name'], $strDirectory.$arrayFiles['name']);
// .
// .
// .
voili, voilou... Te reste plus qu'à essayer le upload multiple lol

@+ ;)

PS: @Dr@ke sans vouloir être chiant:
Array
(
    [nom_du_fichier] => Array
        (
            [name] => 'mon image.jpg',
            [type] => 'image/jpeg',
            [tmp_name] => 'C:\WINDOWS\Temp\php39F.tmp',
            [error] => 0,
            [size] => 146198,
        )
)
Sous balises Php, c'est plus lisible et surtout entre ' et , c'est plus Safe...
Sauf que c'était pas du code mais le résultat d'un print_r... de plus t'as ajouté un , qui est en trop.

EDIT: [*] ajout pour être plus clair ;)
Modifié en dernier par FuZZyLine le 31 août 2009, 13:51, modifié 2 fois.

Mammouth du PHP | 985 Messages

31 août 2009, 13:47

Ok Désolé, j'avais mal lu, je comprend mieux maintenant...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.