[résolu] Problème upload fichier

ViPHP
ViPHP | 2577 Messages

05 janv. 2012, 10:56

je dois attendre un peu car le chargement est encore en cours. En ce qui concerne la ligne que tu m'invites à écrire, où faut-il la placer ?
entre $tableau[$i] = explode($separateur, fgets($fichier,500));
et
$i++;

? c'est ca ? (désolé de poser des questions qui peuvent sembler stupides, c'est juste que je touche aux langages internet depuis à peine 1 mois..)
Avec du retard : oui

Autrement, il me semble surtout qu'il faut contrôler le contenu de chaque ligne avant l'insertion. Je fais ce genre de chargement et on a plein de problème avec les fichiers reçus. Cela va du champs avec trop de caractères, au non numérique sans parler de l'inversion de colonnes. Le plus drôle a été des montants avec des séparateurs de millier ; un utilisateur qui a fait du zèle.
C'est tellement chiant que je préfère faire un premier programme pour contrôler le fichier avant de le charger. En cas de problème on renvoi le fichier à l'utilisateur pour qu'il le corrige. L'utilisateur vient alors nous voir, mais petit à petit à force il y a des progrès.

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

05 janv. 2012, 11:12

En cas de problème on renvoi le fichier à l'utilisateur pour qu'il le corrige. L'utilisateur vient alors nous voir
c'est pas bête d'éduquer l'utilisateur :)
Il en faut peu pour être heureux ......

Eléphant du PHP | 97 Messages

05 janv. 2012, 15:39

D'acc, j'essayerai ce que tu me dis de faire, je m'en occuperai en revenant sur ce post en revenant un peu plus tard. Là, j'ai un autre problème qui me turlupine considérablement.. On va revenir une étape en arrière !

Donc, je place mes fichiers à uploader dans le formulaire mis à disposition, je valide et ...

En local :

Grand Centre_1 : Upload effectué avec succès ! :)
Grand Centre_2 : Pas de fichiers sélectionné
Grand Centre_3 : Pas de fichiers sélectionné
Île-de-France_1 : Upload effectué avec succès ! :)
Île-de-France_2 : Upload effectué avec succès ! :)
Île-de-France_3 : Upload effectué avec succès ! :)
Méditerranée_1 : Upload effectué avec succès ! :)
Méditerranée_2 : Pas de fichiers sélectionné
Méditerranée_3 : Pas de fichiers sélectionné
Ouest_1 : Upload effectué avec succès ! :)
Ouest_2 : Pas de fichiers sélectionné
Ouest_3 : Pas de fichiers sélectionné
Rhône-Alpes Auvergne_1 : Upload effectué avec succès ! :)
Rhône-Alpes Auvergne_2 : Pas de fichiers sélectionné
Rhône-Alpes Auvergne_3 : Pas de fichiers sélectionné
Sud Ouest_1 : Upload effectué avec succès ! :)
Sud Ouest_2 : Pas de fichiers sélectionné
Sud Ouest_3 : Pas de fichiers sélectionné
Nord Ouest_1 : Upload effectué avec succès ! :)
Nord Ouest_2 : Pas de fichiers sélectionné
Nord Ouest_3 : Pas de fichiers sélectionné
Est_1 : Upload effectué avec succès ! :)
Est_2 : Pas de fichiers sélectionné
Est_3 : Pas de fichiers sélectionné
National_1 : Pas de fichiers sélectionné
National_2 : Pas de fichiers sélectionné
National_3 : Pas de fichiers sélectionné


sur le serveur :

Grand Centre_1 : Upload effectué avec succès ! :)
Grand Centre_2 : Pas de fichiers sélectionné
Grand Centre_3 : Pas de fichiers sélectionné
Île-de-France_1 : Upload effectué avec succès ! :)
Île-de-France_2 : Upload effectué avec succès ! :)
Île-de-France_3 : Upload effectué avec succès ! :)
Méditerranée_1 : Upload effectué avec succès ! :)
Méditerranée_2 : Pas de fichiers sélectionné
Méditerranée_3 : Pas de fichiers sélectionné
Ouest_1 : Upload effectué avec succès ! :)
Ouest_2 : Pas de fichiers sélectionné
Ouest_3 : Pas de fichiers sélectionné
Rhône-Alpes Auvergne_1 : Upload effectué avec succès ! :)
Rhône-Alpes Auvergne_2 : Pas de fichiers sélectionné
Rhône-Alpes Auvergne_3 : Pas de fichiers sélectionné
Sud Ouest_1 : Upload effectué avec succès ! :)
Sud Ouest_2 : Pas de fichiers sélectionné
Sud Ouest_3 : Pas de fichiers sélectionné
Nord Ouest_1 : Upload effectué avec succès ! :)
Nord Ouest_2 : Pas de fichiers sélectionné
Nord Ouest_3 : Le fichier n'existe pas :(
Est_1 : Le fichier n'existe pas :(
Est_2 : Le fichier n'existe pas :(
Est_3 : Le fichier n'existe pas :(
National_1 : Le fichier n'existe pas :(
National_2 : Le fichier n'existe pas :(
National_3 : Le fichier n'existe pas :(

Alors que j'utilise les mêmes programmes PHP, identiques !
Donc je me dit, bein oui normal, en local, j'avais modifié mes paramètres dans php.ini :
file_uploads = on
upload_max_filesize = 50M
post_max_size = 60M
memory_limit = 128M

donc il faut que je les égalise ou même que je les améliore sur le serveur.
Mais alors je vois que la fonction phpinfo() m'indique ces paramètres-là sur le serveur :
file_uploads = on
upload_max_filesize = 2047M
post_max_size = 2047M
memory_limit = 256M

C'est là où je me dit : franchement j'y comprend rien ! les paramètres sont plus importants, ca devrait passer tranquille, et malgré tout ca me balance que la région Est passe pas ! Et en plus ca m'indique des messages d'erreur différents ("le fichier n'existe pas" au lieu de "pas de fichier selectionné").

Au final, j'ai donc 2 questions :
Pourquoi ca marche pas ???????? :(
Ou modifie-t-on les paramètres du serveur pour essayer de mettre les mêmes paramètres qu'en local ?

Eléphant du PHP | 97 Messages

05 janv. 2012, 15:54

J'ai rajouté un print_r($_POST) dans la version serveur, et ca me donne ca :

Array
(
[1_1] => Array
(
[name] => GC_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpNeMhlO
[error] => 0
[size] => 3483935
)

[1_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[1_3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[2_1] => Array
(
[name] => IDF1_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpNAkhKj
[error] => 0
[size] => 7147511
)

[2_2] => Array
(
[name] => IDF2_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpOtSGdk
[error] => 0
[size] => 55402
)

[2_3] => Array
(
[name] => IDF3_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpZdfSUk
[error] => 0
[size] => 535459
)

[3_1] => Array
(
[name] => MED_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpEz1KIp
[error] => 0
[size] => 4779773
)

[3_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[3_3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[4_1] => Array
(
[name] => O_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpL27boE
[error] => 0
[size] => 5341317
)

[4_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[4_3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[5_1] => Array
(
[name] => RAA_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpdQcqkw
[error] => 0
[size] => 5226799
)

[5_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[5_3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[6_1] => Array
(
[name] => SO_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpX4AVum
[error] => 0
[size] => 4177572
)

[6_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[6_3] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

[7_1] => Array
(
[name] => NO_2010.csv
[type] => application/vnd.ms-excel
[tmp_name] => /share/MD0_DATA/Web/phpsVwuLo
[error] => 0
[size] => 3877255
)

[7_2] => Array
(
[name] =>
[type] =>
[tmp_name] =>
[error] => 4
[size] => 0
)

)

C'set-a-dire que ca prend même pas en compte les potentiels fichiers 7_3 / 8_1 / 8_2 / 8_3 / 9_1 / 9_2 et 9_3 !!!!

ViPHP
ViPHP | 2287 Messages

05 janv. 2012, 16:09

Personnellement je pense qu'un upload d'autant de fichiers d'un coup n'est pas raisonnable. Même si ça demande un effort de ta part, il serait judicieux de fractionner ces étapes, ça te permettrait de faire des contrôles plus simples et fiables et ça t'éviterait aussi tous ces soucis de paramétrage.

Pour ma part je m'efforce de me limiter à 4 fichiers (dans la plupart des cas, 1 seul) et 10Mo par upload.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 97 Messages

05 janv. 2012, 16:13

Oui, mais meme si je veux ne rajouter que la région Est, ca ne fonctionne pas ! Et le fichier ne fait que 4Mo

ViPHP
ViPHP | 2287 Messages

05 janv. 2012, 16:21

Oui, mais meme si je veux ne rajouter que la région Est, ca ne fonctionne pas ! Et le fichier ne fait que 4Mo
"Ça ne fonctionne pas" est une expression à éviter, car elle ne nous apprend strictement rien sur le problème que tu rencontres ;)

Par curiosité, peux-tu trouver un chronomètre (ou une montre indiquant les secondes), et recommencer pour ce fichier uniquement (puisqu'il semble à lui seul symptomatique du problème) en mesurant précisément le temps écoulé entre ton clic sur le bouton submit du formulaire et l'affichage d'un message d'erreur (que tu copieras aussi, stp) en nous indiquant le temps écoulé le plus précisément possible ? En précisant aussi si l'upload est réalisé en local ou en ligne.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 97 Messages

05 janv. 2012, 16:30

Mais en soit ce n'est pas vraiment le fichier Est qui ne marche pas.
Le formulaire est fait comme ceci :

Grand Centre : ________ parcourir ________ parcourir ________ parcourir
ile de france : ________ parcourir ________ parcourir ________ parcourir
mediterannée : ________ parcourir ________ parcourir ________ parcourir
ouest : ________ parcourir ________ parcourir ________ parcourir
rhone alpes auvergne : ________ parcourir ________ parcourir ________ parcourir
sud ouest : ________ parcourir ________ parcourir ________ parcourir
nord ouest : ________ parcourir ________ parcourir ________ parcourir
est : ________ parcourir ________ parcourir ________ parcourir
national : ________ parcourir ________ parcourir ________ parcourir
année : ****
séparateur o ; o ,

Valider

Et en fait, c'est comme si la page qui traite le formulaire n'arrive qu'a "lire" jusqu'au deuxième upload nord-ouest. Donc évidemment, le fichier Est ne fonctionne pas. Si je transfère le fichier Est dans le formulaire de Grand-centre, il sera lu et sera bien posté. Mais il resortira avec le nom grand-centre

ViPHP
ViPHP | 2287 Messages

05 janv. 2012, 16:35

Et en fait, c'est comme si la page qui traite le formulaire n'arrive qu'a "lire" jusqu'au deuxième upload nord-ouest. Donc évidemment, le fichier Est ne fonctionne pas. Si je transfère le fichier Est dans le formulaire de Grand-centre, il sera lu et sera bien posté. Mais il resortira avec le nom grand-centre
Ok, alors teste avec autant de fichiers que tu veux (les plus petits, histoire d'être sûr) et essaye le chronométrage que je te demandais juste au dessus stp.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 97 Messages

05 janv. 2012, 16:42

LOCAL

Code : Tout sélectionner

Grand Centre_1 : Upload effectué avec succès ! Grand Centre_2 : Pas de fichiers sélectionné Grand Centre_3 : Pas de fichiers sélectionné Île-de-France_1 : Upload effectué avec succès ! Île-de-France_2 : Upload effectué avec succès ! Île-de-France_3 : Upload effectué avec succès ! Méditerranée_1 : Upload effectué avec succès ! Méditerranée_2 : Pas de fichiers sélectionné Méditerranée_3 : Pas de fichiers sélectionné Ouest_1 : Upload effectué avec succès ! Ouest_2 : Pas de fichiers sélectionné Ouest_3 : Pas de fichiers sélectionné Rhône-Alpes Auvergne_1 : Upload effectué avec succès ! Rhône-Alpes Auvergne_2 : Pas de fichiers sélectionné Rhône-Alpes Auvergne_3 : Pas de fichiers sélectionné Sud Ouest_1 : Upload effectué avec succès ! Sud Ouest_2 : Pas de fichiers sélectionné Sud Ouest_3 : Pas de fichiers sélectionné Nord Ouest_1 : Upload effectué avec succès ! Nord Ouest_2 : Pas de fichiers sélectionné Nord Ouest_3 : Pas de fichiers sélectionné Est_1 : Upload effectué avec succès ! Est_2 : Pas de fichiers sélectionné Est_3 : Pas de fichiers sélectionné National_1 : Pas de fichiers sélectionné National_2 : Pas de fichiers sélectionné National_3 : Pas de fichiers sélectionné
Chronométré en 2 secondes 45 centièmes

SERVEUR

Code : Tout sélectionner

Array ( [1_1] => Array ( [name] => GC_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpCNrnkx [error] => 0 [size] => 3483935 ) [1_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [1_3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [2_1] => Array ( [name] => IDF1_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/php4gtZIu [error] => 0 [size] => 7147511 ) [2_2] => Array ( [name] => IDF2_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phph2mF60 [error] => 0 [size] => 55402 ) [2_3] => Array ( [name] => IDF3_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpSpEILx [error] => 0 [size] => 535459 ) [3_1] => Array ( [name] => MED_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/php7H6lT8 [error] => 0 [size] => 4779773 ) [3_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [3_3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [4_1] => Array ( [name] => O_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpZPelTm [error] => 0 [size] => 5341317 ) [4_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [4_3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [5_1] => Array ( [name] => RAA_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpN5H2Fw [error] => 0 [size] => 5226799 ) [5_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [5_3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [6_1] => Array ( [name] => SO_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpya3pxp [error] => 0 [size] => 4177572 ) [6_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [6_3] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) [7_1] => Array ( [name] => NO_2010.csv [type] => application/vnd.ms-excel [tmp_name] => /share/MD0_DATA/Web/phpflGGBO [error] => 0 [size] => 3877255 ) [7_2] => Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) )
Chronométré en 5 secondes 44 centièmes

ViPHP
ViPHP | 2577 Messages

05 janv. 2012, 16:47

Issu de la doc :
Depuis PHP 5.2.12, le paramètre max_file_uploads limite le nombre de fichiers qui peuvent être envoyés en une requête. Vous devrez vérifier que votre formulaire ne tente pas d'envoyer plus de fichiers dans la requête que ne le tolère cette limite.

ViPHP
ViPHP | 2287 Messages

05 janv. 2012, 16:49

Woua je m'attendais plutôt à des minutes qu'à des secondes :shock:

Bon, ce test ne confirme pas mon intuition mais indique au moins que tes scripts entre ta version locale et ton serveur sont divergents.

Je vois aussi que le fichier "Est" a bien été pris en compte cette fois, en revanche c'est le "National" qui manque. Il te manque donc le dernier fichier à chaque upload (Ce qui oriente le problème vers une limite de boucle, un < au lieu d'un <= ou quelquechose comme ça).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 2577 Messages

05 janv. 2012, 16:56

Je me répète :
Issu de la doc :
Depuis PHP 5.2.12, le paramètre max_file_uploads limite le nombre de fichiers qui peuvent être envoyés en une requête. Vous devrez vérifier que votre formulaire ne tente pas d'envoyer plus de fichiers dans la requête que ne le tolère cette limite.
En plus de 1_1 à 7_2 ca fait pile 20 fichiers

ViPHP
ViPHP | 2287 Messages

05 janv. 2012, 17:00

@Mazarini : bien vu, ça expliquerait pourquoi il n'y a pas de 7_3 dans $_FILES :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 97 Messages

05 janv. 2012, 17:06

Je viens de voir que ca faisait 20 fichiers également ! Je suis allé voir dans les parametres config du serveur, et SURPRISE !
max_file_uploads = 20

Reste donc a savoir comment modifier ce paramètre :) Z'avez une idée ? où trouver un espèce de fichier .conf ou .ini ?? :)