Problème d'upload : fichier temporaire inexistant

bigcheaf
Invité n'ayant pas de compte PHPfrance

26 janv. 2012, 01:05

Bonjour,

J'ai un gros problème d'upload de fichiers.
Mais avant tout, voici le code :
	
if ($aFile["error"] !== UPLOAD_ERR_OK) {
	throw new cException("Erreur lors de l'upload temporaire du fichier.");
}

var_dump($aFile);
var_dump(is_file($aFile["tmp_name"]));
var_dump(is_file(str_replace("\\", "/", $aFile["tmp_name"])));
var_dump(realpath($aFile["tmp_name"]));
var_dump(is_file(realpath($aFile["tmp_name"])));

if (!is_uploaded_file(realpath($aFile["tmp_name"]))) {
	throw new cException("Erreur lors de l'upload temporaire du fichier : fichier inexistant.");
}

if (!move_uploaded_file($aFile["tmp_name"], $uploadDir.$fileName)) {
	throw new cException("Le chargement du fichier a échoué !");
}
et voici la sortie :
array
'name' => string 'test.pdf' (length=8)
'type' => string 'application/pdf' (length=15)
'tmp_name' => string 'D:\wamp\tmp\php8E0B.tmp' (length=23)
'error' => int 0
'size' => int 42787

boolean false

boolean false

boolean false

boolean false

Erreur lors de l'upload temporaire du fichier : fichier inexistant.
Il semble donc que le fichier temporaire n'existe pas.
Pourtant je n'ai aucune erreur dans le tableau $_FILES (error = 0), et j'ai la bonne taille (size = 42787).

J'ai aussi vérifier les droits sur tous les dossiers menant au répertoire temporaire : aucun problème de ce côté là.

Je n'y comprend plus rien.

Merci de votre aide.

Mammouth du PHP | 1339 Messages

27 janv. 2012, 03:32

Et si tu vires realpath ?

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

27 janv. 2012, 07:52

- var_dump() n'est utilisable qu'avec les variables tu ne peux donc l'utiliser comme tu le fait avec des fonctions en paramètres (voir la donc pour plus d'info)
- tu lève une d'exception en cas de succès ? O_o
- comme l'indique elie le realpath est inutile tmp_name contient le chemin complet depuis la racine.
- tmp_name n'a pas vraiment besoil d'être vérifiée vu que sinon error est != zéro et donc ta 1ère exception est levée
Au pire tu peux utiliser file_exists si vraiment tu ne fait pas confiance au serveur web (ceinture et bretelle ? ;) )


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

tguerlus
Invité n'ayant pas de compte PHPfrance

10 févr. 2012, 15:01

J'ai exactement le même problème, chez moi et chez mon hebergeur, aucune erreur de visible mais le repertoire temporaire reste desesperement vide.
le filesize dans move_uploaded_file emet un warning stat fail car il ne trouve pas le fichier temporaire.
Es-ce que quelqu'un d'autre à le problème? et surtout une solution?

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

13 févr. 2012, 14:51

salut,

a tu effectué les démarches que j'ai indiqué au dessus ?

notamment un var_dump($_FILES);

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

Petit nouveau ! | 5 Messages

17 févr. 2012, 04:10

J'ai eu le même problème mais en local seulement.
Je me suis aperçue après des heures et des heures à n'y rien comprendre que ça venait de mon php.ini
J'avais bien réglé la variable upload_max_filesize mais je n'avais pas modifié celle concernant la taille maximale dans un formulaire. Je ne savais même pas qu'elle existait à vrai dire...
À l'époque j'avais trouvé les infos que voici, en espérant que ça aidera quelqu'un !
post_max_size [integer]
Définit la taille maximale des données reçues par la méthode POST. Cette option affecte également les fichiers chargés. Pour charger de gros fichiers, cette valeur doit être plus grande que la valeur de upload_max_filesize. Si la limitation de mémoire est activée par votre script de configuration, memory_limit affectera également les fichiers chargés. De façon générale, memory_limit doit être plus grand que post_max_size. Lorsqu'un entier est utilisé, sa valeur est mesurée en octets. Vous pouvez également utiliser la notation sténographique comme décrit dans cette entrée de la FAQ.. Dans le cas où la taille des données reçues par la méthode POST est plus grande que post_max_size, les superglobales $_POST et $_FILES seront vides. Ceci peut être surveillé de différentes façons, e.g. en passant une variable $_GET au script qui traite les données, i.e. <form action="edit.php?processed=1">, et ainsi vérifier si $_GET['processed'] est défini.
Source: http://php.net/manual/fr/ini.core.php