PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 30-04-2010 08:14:18

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

[Résolu] Import de Fichier.

Bonjour

J'ai un soucis pour lequel je me tire les cheveux ! j'essaye d'uploader puis importer sous sql un fichier csv mais mon script me répond que le fichier n'existe pas, voici mon code :

if(isset($_POST['action']))
{
$fichier = basename($_FILES['fichier']['name']);
$taille_maxi = 2048000;
$taille = filesize($_FILES['fichier']['tmp_name']);
$extensions = array('.csv');
$extension = strrchr($_FILES['fichier']['name'], '.');

//Début des vérifications de sécurité...
if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
{
     $erreur = 'Vous devez uploader un fichier de type csv...';
}
if($taille>$taille_maxi)
{
     $erreur = 'Le fichier est trop volumineux pour être traité en une seule fois (2048Mo maximum) ...';
}
if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
{
     //On formate le nom du fichier ici...
     $fichier = strtr($fichier,
          'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
          'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
     $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
 /* On ouvre le fichier à importer en lecture seulement */
 if (file_exists($fichier))
     $fp = fopen('$fichier', 'r');
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }
     
    while (!feof($fp)) /* Et Hop on importe */
    { /* Tant qu'on n'atteint pas la fin du fichier */
       $ligne = fgets($fp,4096); /* On lit une ligne */  

       /* On récupére les champs séparés par ; dans liste*/
       $liste = explode( ";",$ligne);  
   
       /* On assigne les variables */
       $cat = $liste[0];
       $pn = $liste[1];
       $marque = $liste[2];
       $modele = $liste[3];
       $processeur = $liste[4];
       $config_memoire = $liste[5];
       $config_disquedur = $liste[6];
       $config_lecteur = $liste[7];
       $carte_graphique = $liste[8];
       $taille_ecran = $liste[9];
       $systeme = $liste[10];
       $pvuht = $liste[11];
       $date_ajout = $liste[12];
       /* Ajouter un nouvel enregistrement dans la table */
       $query = "INSERT IGNORE INTO z_partnumber_config (id,cat,pn,marque,modele,processeur,config_memoire,config_disquedur,config_lecteur,carte_graphique,taille_ecran,systeme,pvuht,date_ajout)
     VALUES('','$cat','$pn','$marque','$modele','$processeur','$config_memoire','$config_disquedur','$config_lecteur','$carte_graphique','$taille_ecran','$systeme','$pvuht',NOW())"
;
       $result= mysql_query($query);
 
       if(mysql_error())
        { /* Erreur dans la base de donnees */
           echo 'Erreur dans la base de données : '.mysql_error().'';
           echo '<br>Importation stoppée';
           exit();
        }

Est ce que quelqu'un peut m'éclairer sur la question, pourquoi le fichier est inexistant alors que je l'importe bien (j'ai essayé de changer le nom du fichier, le chmod des dossiers du script mais rien n'y fait) j'ai pourtant déjà utilisez ce script avant mais la il ne fonctionne plus :'(

Merci à vous, bonne journée

Hors ligne

#2 30-04-2010 08:26:03

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Import de Fichier.

Salut,

Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+  --> documentation

P.S : pas forcement X, mais la lettre souhaitée avec un "+" derrière pour permettre l'écriture


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 30-04-2010 11:11:39

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Import de Fichier.

Bonjour,

Première phrase des mesures de régulation...

Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).

Premier et dernier avertissement.

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#4 30-04-2010 12:52:58

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : [Résolu] Import de Fichier.

ManicoW a écrit :

Bonjour,

Première phrase des mesures de régulation...

Un nouveau message ne disant pas bonjour, ou insultant, dont le titre est tout en majuscules, pourra être supprimé sans justification (raisons non limitatives).

Premier et dernier avertissement.

@+

Désolé je ne peux pas le modifier. [NdM] Titre modifié

Alnoss a écrit :

Salut,

Ton fopen est en paramètre " R " alors qu'il devrait être en " x "+ --> documentation

Cela ne fonctionne pas, le paramètre R est pour ouvrir le fichier en lecture, même avec le X cela ne fonctionne pas désolé, avez vous une autre idée ?

Cordialement

Hors ligne

#5 30-04-2010 13:11:28

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Import de Fichier.

as-tu lu la documentation ???

Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)

Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+

VAS LIRE LA DOC !!!


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#6 30-04-2010 13:29:55

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : [Résolu] Import de Fichier.

Alnoss a écrit :

as-tu lu la documentation ???

Si le fichier existe, et que tu veux écrire dedans, alors c'est R+ (et pas R)

Si le fichier existe, et que tu veux le vider avant d'écrire dedans, alors c'est W+

VAS LIRE LA DOC !!!

Ma demande n'a rien avoir avec écrire dans un fichier mais importer un fichier dans le but de l'insérer dans une BDD (donc uniquement le lire). Le problème est que lorsque j'importe via mon formulaire le fichier le script répond que le fichier est introuvable.

/* On ouvre le fichier à importer en lecture seulement */
 if (file_exists($fichier))
     $fp = fopen('$fichier', 'r');
 else
     { /* le fichier n'existe pas */
       echo "Fichier introuvable !<br>Importation stoppée.";
       exit();
     }

Hors ligne

#7 30-04-2010 13:36:35

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Import de Fichier.

ok , reprenons :

Contrairement à ce que tu crois, ta demande a TOUT a voir avec écrire dans un fichier.

Uploader un fichier, c'est écrire dans un fichier distant les infos (textes, images, etc) d'un fichier local donc il faut bien que tu écrives, non ??
Ce que tu ne comprends pas , c'est que ce n'est pas le fichier source qui est introuvable, mais le fichier destination...

Il semble que tu ne connaisses pas le principe de l'upload alors petit résumé :
- fichier A en local
- fichier B en distant
le script d'upload ouvre A, lit les données, et les écrit dans B (via un fopen R+ ou W+) (d'où la nécessité du chmod)
(A & B ont donc les mêmes contenus, mais ce n'est PAS DU TOUT le même fichier, même s'ils ont le même nom)

L'étape suivante, c'est lire B pour l'insertion dans la bdd ! tu as déjà des topics à ce sujet

Selon ton script, il semblerait que tu ne veuilles pas passer par l'étape upload... mais plutôt lire le contenu du fichier local (A), et insérer directement les valeurs dans la base, sans passer par un fichier distant... la problématique n'est pas la même, alors précise la méthode que tu veux appliquer


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#8 01-05-2010 10:30:49

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : [Résolu] Import de Fichier.

Bonjour

Je ne veux pas uploader, je veux lire et insérer le fichier sans le déposer sur le FTP, est ce que cela te paraît plus clair ? Mon idée c'est de ne pas télécharger le fichier sur le serveur mais juste de le lire depuis le poste client est de l'enregistrer dans la base directement.

Donc si j'ai bien compris ton explication, j'ai besoin de lire le contenu du fichier local (A) et insérer directement les valeurs dans la base sans passé par le fameux fichier distant.

Merci beaucoup pour tes explications.

Antho

Hors ligne

#9 01-05-2010 11:37:22

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Import de Fichier.

Alnoss, le truc pour bien comprendre ce genre de problème, c'est pas dans la doc de fopen que notre ami anthotill les trouveras, c'est dans la doc de la gestion des droits d'accès des groupes utilisateurs sous UNIX. Ca relève donc de la formation de base d'un administrateur système UNIX. wink

Anthotill, malgré tout ce que tu as pu dire, relis bien ce qu'à dit Alnoss, car je t'assure c'est toi qui n'as toujours pas compris^^

Allez, a+


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 01-05-2010 11:59:17

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Import de Fichier.

Bonjour,

Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème smile

Mais le pense que Anthotill aussi un peu smile

Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.

Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.

Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).

Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.

Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi smile

Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire smile

@+


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#11 01-05-2010 12:07:36

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : [Résolu] Import de Fichier.

Oui on peut le faire sans la lire suis d'accord, mais pour comprendre comment Unix gère les droits d'accès utilisateurs et ce qu'implique réellement au niveau du serveur un droit d'accès en lecture,écriture sur les fichiers y a pas mieux. Car sous Unix je le rappele toute la gestion du système et sa sécurité passe par les droits d'accès aux fichiers qu'il gère.
De plus uploader un fichier sur un serveur unix, signifie lire en local et écrire à distance... Car comme tu l'as si bien dit, importer en bdd passe d'abord par un upload finalisé^^.

Dernière modification par Jc (01-05-2010 12:10:49)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#12 01-05-2010 12:24:36

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : [Résolu] Import de Fichier.

Jc a écrit :

Oui on peut le faire sans la lire suis d'accord, mais pour comprendre comment Unix gère les droits d'accès utilisateurs et ce qu'implique réellement au niveau du serveur un droit d'accès en lecture,écriture sur les fichiers y a pas mieux. Car sous Unix je le rappele toute la gestion du système et sa sécurité passe par les droits d'accès aux fichiers qu'il gère.
De plus uploader un fichier sur un serveur unix, signifie lire en local et écrire à distance... Car comme tu l'as si bien dit, importer en bdd passe d'abord par un upload finalisé^^.

Unix, unix, unix. Et si je veux un serveur sous windows ? tongue

Edit : Mais meuuuh quoi... sad

Dernière modification par xTG (01-05-2010 13:37:31)

Hors ligne

#13 01-05-2010 12:34:05

ManicoW
Cowrespondant
Lieu : Tours
Inscription : 08-05-2009
Messages : 192
Site Web

Re : [Résolu] Import de Fichier.

xTG, TU SORS ! smile


la v2, c'est tabou, on en viendra tous a bout

Hors ligne

#14 02-05-2010 09:59:27

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Import de Fichier.

bon ben alors je sors aussi [ben ouais quoi, il fait beau, chaud et la moto attends que ça ^^]

P.S : non, mes upload sont pas à coup de fopen ^^. C'est justement pour cela que je demandais ce que notre ami souhaitait faire wink


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#15 03-05-2010 05:52:57

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : [Résolu] Import de Fichier.

ManicoW a écrit :

Bonjour,

Désolé Alnoss et Jc, mais sur ce coup là, vous êtes bien a coté du problème smile

Mais le pense que Anthotill aussi un peu smile

Donc en résumé, le but c'est d'importer un csv dans une bdd. Donc en effet, on écris dans la bdd, pas dans un fichier.

Anthotill, tu dois comprendre que pour faire cet import, le fichier doit être sur le serveur qui execute le php.

Cela veut dire que soit tu as php sur ta propre machine, et dans ce cas la partie qui utilise les controles d'upload d'un fichier sont inutiles, il faut juste faire une lecture du fichier, soit tu fait un upload du fichier sur le serveur qui execute php (via un formulaire je suppose), et dans ce cas, il faut que tu finalise l'upload avant de pouvoir le lire (sur un serveur normalement configuré, tu ne peux pas lire le fichier temporaire directement).

Une fois le fichier uploadé correctement, tu pourra le lire, l'importer en bdd comme ton script veut le faire, et le supprimer si tu veux.

Alnoss, je ne sais pas comment tu fais un upload, mais si c'est a coup de fopen, heuuuu, je vais te demander de relire la doc php aussi smile

Et pour la doc des droits d'accès des groupes, heuuu, wai, on peut faire un upload sans la lire smile

@+

Merci beaucoup c'est toi qui a compris.

Je pensais que l'on pouvait le faire sans uploader le fichier, je vais donc uploader le fichier avant de le traiter.

Merci

Hors ligne

#16 03-05-2010 07:44:16

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : [Résolu] Import de Fichier.

Bonjour

Voila, en ajoutant

<?php
if(move_uploaded_file($_FILES['fichier']['tmp_name'], $fichier))
?>

Cela fonctionne (avec r pour lire le fichier wink)

Merci à tous

Dernière modification par Anthotill (03-05-2010 07:45:29)

Hors ligne

#17 03-05-2010 08:24:32

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : [Résolu] Import de Fichier.

Si je peux me permettre une remarque :

Cette façon est efficace et simple, mais possède un énorme désavantage : elle est dépendante de ta bande passante, et tu risques à terme le timeout, ou que la totalité des infos ne passent pas (baisse de débit, déconnexion, etc...). Dans ce cas, si tu as un site qui se sert de la base -> risque de plantage, ou lenteur de sa Mise à jour d'où indisponibilité.

A contrario, si ton fichier est déjà sur le serveur distant (via un upload qui même s'il est long, ne pénalisera pas le site qui se sert de la base vu que la mise à jour ne se fera que lorsque le fichier sera totalement distant), c'est plus rapide (lors de l'insert) et tu es sûr qu'il soit complet (via une mini verif).

Cela peut, dans certains cas, être utile de le savoir wink Chacun pourra choisir selon son usage.


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

Pied de page des forums