[résolu] Problème upload fichier
Posté : 03 janv. 2012, 18:34
Bonjour,
je cherche un moyen de mettre à jour une table de ma base de données directement à partir de l'import de fichier .csv dans une page accessible par l'administrateur.
Pour cela, je crée un formulaire par lequel je vais uploader les fichiers : update_base.php
Dans cette fonction, je vérifie si on a bien inséré un fichier à uploader, je fais les test d'erreur, je vérifie si on upload bien un fichier .csv et enfin je transfère mes fichiers dans le dossier que je souhaite.
En tout, j'ai 8 régions (Grand-Centre, Ile-de-France, Méditerranée, Ouest, Rhone-Alpes/Auvergne, Sud-Ouest, Nord-Ouest, Est) donc 8 fichiers .csv à uploader (+2fichiers car la région Ile de France est répartie en 3fichiers). Et lorsque j'upload mes 8+2=10 fichiers, ma page PHP m'informe que je n'ai rien uploadé :
Grand Centre_1 : Le fichier n'existe pas
Grand Centre_2 : Le fichier n'existe pas
Grand Centre_3 : Le fichier n'existe pas
Île-de-France_1 : Le fichier n'existe pas
Île-de-France_2 : Le fichier n'existe pas
Île-de-France_3 : Le fichier n'existe pas
Méditerranée_1 : Le fichier n'existe pas
Méditerranée_2 : Le fichier n'existe pas
Méditerranée_3 : Le fichier n'existe pas
Ouest_1 : Le fichier n'existe pas
Ouest_2 : Le fichier n'existe pas
Ouest_3 : Le fichier n'existe pas
Rhône-Alpes Auvergne_1 : Le fichier n'existe pas
Rhône-Alpes Auvergne_2 : Le fichier n'existe pas
Rhône-Alpes Auvergne_3 : Le fichier n'existe pas
Sud Ouest_1 : Le fichier n'existe pas
Sud Ouest_2 : Le fichier n'existe pas
Sud Ouest_3 : Le fichier n'existe pas
Nord Ouest_1 : Le fichier n'existe pas
Nord Ouest_2 : Le fichier n'existe pas
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
J'ai fait un
Alors je décide de faire ca au fur et à mesure et j'observe que jusqu'à "Nord-Ouest", l'upload fonctionne correctement, ce qui correspond à un upload de 33,8Mo.
Dans le doute de me dire que c'était un problème de capacité d'upload j'ai modifié des valeurs dans php.ini, à savoir :
post_max_size=60M
upload_max_filesize=50M
Malgré tout ça, je n'arrive pas a uploader tous mes fichiers. Alors je ne sais pas vraiment quoi faire.. En soit, je ne pense pas qu'il s'agisse d'une erreur de code PHP mais plus une erreur de réglage de paramètre, mais lequel ?
Merci d'avance pour votre aide.
je cherche un moyen de mettre à jour une table de ma base de données directement à partir de l'import de fichier .csv dans une page accessible par l'administrateur.
Pour cela, je crée un formulaire par lequel je vais uploader les fichiers : update_base.php
<?php
include_once("../include/header.php");
include_once("adm_common.php");
$nbr_fichier_par_region = 3;
checkRights();
rubriquesAdm(2,"Mettre à jour la base de données");
echo '
<form method="post" action="confirmation_fill.php" enctype="multipart/form-data">
<p>
<h3>Instructions :</ br></h3>
<ol>
<li>Sélectionnez les fichiers csv précédemment créés dans la case en regard du nom de la région correspondante (Remarque :
il est possible de rentrer deux fichiers par région car certaines régions sont sur deux fichiers)</li>
<li>Entrez l\'année correspondante aux fichiers sélectionnés (Obligatoire)</li>
<li>Validez</li>
</ol>
</p>
<p>
<table>
';
$req="SELECT nom_region, id_region FROM region ORDER BY id_region";
$result=mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo '<tr><td><label>'.$row['nom_region'].'</label>';
for($i = 1 ; $i <= $nbr_fichier_par_region ; $i++){
echo '<td><input type="file" name="' . $row['id_region'] . '_' . $i .'"></input></td>';
}
echo '</tr>';
}
mysql_free_result($result);
echo '<tr><td><label for="annee">Année :</label></td>
<td><input type="text" name="annee" id="annee"/></td></tr>';
echo '<tr><td><label for="separateur">Séparateur : </label></td>
<td>
<input type="radio" name="separateur" value=";" id="point_virgule" checked="checked"/> <label for="point_virgule">;</label>
<input type="radio" name="separateur" value="," id="virgule" /> <label for="virgule">,</label>
</td></tr>';
echo '<input type="hidden" name = "nbr_fichier_par_region" value ="' . $nbr_fichier_par_region . '"/>';
echo'
</table>
</p>
<div class="boutons"><!-- BOUTONS -->
<input type="submit" value="Valider"/>
<input type="reset" tabindex=55/>
</div>
</form>
';
fermeAdm();
?>
<?php
include("../include/footer.php");
?>
Ensuite, je dois traiter les informations transmises dans le formulaire, ces informations sont envoyées à confirmation_fill.php, comme vous pouvez le voir dans le formulaire.Dans cette fonction, je vérifie si on a bien inséré un fichier à uploader, je fais les test d'erreur, je vérifie si on upload bien un fichier .csv et enfin je transfère mes fichiers dans le dossier que je souhaite.
<?php
include_once("../include/header.php");
?>
<?php
$req="SELECT nom_region, id_region FROM region ORDER BY id_region";
$result=mysql_query($req) or die('Requête invalide : ' . mysql_error() . "\n" . 'Requête complète : ' . $req);
$array_nom_region = array();
$array_id_region = array();
$files_number = 0;
echo '<table>';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)){
for($i = 1 ; $i <= $_POST['nbr_fichier_par_region'] ; $i++){
$nom_region_courrant = $row['nom_region'] . '_' . $i;
$id_region_courrant = $row['id_region'] . '_' . $i;
if (isset($_FILES[$id_region_courrant])){
// GESTION DES ERREURS
if ($_FILES[$id_region_courrant]['error']){
switch ($_FILES[$id_region_courrant]['error']){
case 1: // UPLOAD_ERR_INI_SIZE
$message = ' : Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !';
break;
case 2: // UPLOAD_ERR_FORM_SIZE
$message = ' : Le fichier dépasse la limite autorisée dans le formulaire HTML !';
break;
case 3: // UPLOAD_ERR_PARTIAL
$message = ' : L\'envoi du fichier a été interrompu pendant le transfert !';
break;
case 4: // UPLOAD_ERR_NO_FILE
$message = ' : Pas de fichiers sélectionné';
break;
}
}
else{
// $_FILES[$id_region_courrant]['error'] vaut 0 soit UPLOAD_ERR_OK
// ce qui signifie qu'il n'y a eu aucune erreur
// On vérifie que le fichier est bien un .csv
// récupère la partie de la chaine à partir du dernier . pour connaître l'extension.
$extension = strrchr($_FILES[$id_region_courrant]['name'], '.');
//Ensuite on teste
if($extension != '.csv'){ //Si l'extension n'est pas dans le tableau
$message = ' : Vous devez uploader un fichier de type csv';
}
else{
$dossier = '../upload/';
if(move_uploaded_file($_FILES[$id_region_courrant]['tmp_name'], $dossier . $nom_region_courrant . '.csv')){ //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
$message = ' : Upload effectué avec succès !';
$array_nom_region[] = $nom_region_courrant;
$array_id_region[] = $id_region_courrant;
$files_number++;
}
else{ //Sinon (la fonction renvoie FALSE).
$message = ' : Echec de l\'upload !';
}
}
}
}
else{
$message = ' : Le fichier n\'existe pas';
}
echo '<tr><td>' . $nom_region_courrant . '</td>
<td>' . $message . '</td></tr>';
}
}
echo '</table>';
?>
<form method="post" action="fill_base.php">
<input type="hidden" name = "array_nom_region" value ="<?php echo implode("|", $array_nom_region); ?>"/>
<input type="hidden" name = "array_id_region" value ="<?php echo implode("|", $array_id_region); ?>"/>
<input type="hidden" name = "files_number" value ="<?php echo $files_number; ?>"/>
<input type="hidden" name = "annee" value ="<?php echo $_POST['annee']; ?>"/>
<input type="hidden" name = "separateur" value ="<?php echo $_POST['separateur']; ?>"/>
<input type="submit" value="Valider" tabindex=50/>
</form>
<?php
include("../include/footer.php");
?>
Mais alors j'obtiens des choses que je ne peux pas expliquer : En tout, j'ai 8 régions (Grand-Centre, Ile-de-France, Méditerranée, Ouest, Rhone-Alpes/Auvergne, Sud-Ouest, Nord-Ouest, Est) donc 8 fichiers .csv à uploader (+2fichiers car la région Ile de France est répartie en 3fichiers). Et lorsque j'upload mes 8+2=10 fichiers, ma page PHP m'informe que je n'ai rien uploadé :
Grand Centre_1 : Le fichier n'existe pas
Grand Centre_2 : Le fichier n'existe pas
Grand Centre_3 : Le fichier n'existe pas
Île-de-France_1 : Le fichier n'existe pas
Île-de-France_2 : Le fichier n'existe pas
Île-de-France_3 : Le fichier n'existe pas
Méditerranée_1 : Le fichier n'existe pas
Méditerranée_2 : Le fichier n'existe pas
Méditerranée_3 : Le fichier n'existe pas
Ouest_1 : Le fichier n'existe pas
Ouest_2 : Le fichier n'existe pas
Ouest_3 : Le fichier n'existe pas
Rhône-Alpes Auvergne_1 : Le fichier n'existe pas
Rhône-Alpes Auvergne_2 : Le fichier n'existe pas
Rhône-Alpes Auvergne_3 : Le fichier n'existe pas
Sud Ouest_1 : Le fichier n'existe pas
Sud Ouest_2 : Le fichier n'existe pas
Sud Ouest_3 : Le fichier n'existe pas
Nord Ouest_1 : Le fichier n'existe pas
Nord Ouest_2 : Le fichier n'existe pas
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
J'ai fait un
<pre><?php print_r($_FILES); ?></pre> pour en être bien sur et effectivement, rien n'est trouvé !!Alors je décide de faire ca au fur et à mesure et j'observe que jusqu'à "Nord-Ouest", l'upload fonctionne correctement, ce qui correspond à un upload de 33,8Mo.
Dans le doute de me dire que c'était un problème de capacité d'upload j'ai modifié des valeurs dans php.ini, à savoir :
post_max_size=60M
upload_max_filesize=50M
Malgré tout ça, je n'arrive pas a uploader tous mes fichiers. Alors je ne sais pas vraiment quoi faire.. En soit, je ne pense pas qu'il s'agisse d'une erreur de code PHP mais plus une erreur de réglage de paramètre, mais lequel ?
Merci d'avance pour votre aide.