IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

lecture d'un fichier csv pour mise en bdd


Sujet :

Langage PHP

  1. #21
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut

    Quelques remarques:

    pourquoi tu écris tes classe comme ça : class CSVUpload_view,
    C'est inutile : tu définis un espace de nom avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    namespace view;
     
    class CSVUpload_view
    Ta classe pleinement qualifiée est view\CSVUpload_view, euh c'est bancal.

    Perds l'habitude de clôturer tes fichiers qui ne contiennent que du PHP avec le ?> final.

    Enfin dans le nommage il y a des normes qu'il est préférable de suivre :
    Dans une arborescence, les répertoires qui rentrent dans le nommage pleinement qualifié de tes classes doivent commencer par une Majuscule.
    Les répertoires techniques servant à l'organisation du code restent en minuscules (src, config, etc.)
    Du coup les espaces de noms prennent une Majuscule car du fait de l'autoloading, ils correspondent généralement à des noms de dossier.

    Les classes sont écrites en CamelCase

  2. #22
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Hello,
    d'abord, faut oublier mon post d'hier soir (#19) : en réalité, je ne récupérais pas le chemin complet du fichier mais seulement son nom ; et j'ai mis plusieurs heures ce matin, avant de m'en rendre compte.... En fait, ton code n'est pas en cause.

    Maintenant, je passe aux remarques que tu viens de me faire :
    - L'écriture du nom de mes classes comme ça class CSVUpload_view, c'est car je mets le même nom à la classe et au fichier qui la définit (je crois que c'est une obligation) et l'extension _view, c'est pour que dès que je vois le nom du fichier, je sais à quel répertoire il appartient (je trouve ça pratique).
    -
    les répertoires qui rentrent dans le nommage pleinement qualifié de tes classes doivent commencer par une Majuscule.
    Ca veut dire que les répertoires model, view, controller devraient plutôt être baptisés Model, View, Controller, non ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  3. #23
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Re-Hello,
    j'ai trouvé un bug dans ton code !

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // séparateur
            if (mb_stripos($row, ',') !== false) {
                $this->separator = ',';
            } elseif (mb_stripos($row, ';') === false) {
                $this->separator = ';';
            } else {
                $this->errors[] = 'Unable to detect the CSV field separator';
                return;
            }

    il fallait faire

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // séparateur
            if (mb_stripos($row, ',') !== false) {
                $this->separator = ',';
            } elseif (mb_stripos($row, ';') !== false) {
                $this->separator = ';';
            } else {
                $this->errors[] = 'Unable to detect the CSV field separator';
                return;
            }

    Par contre, un souci avec fgetcsv :
    Warning: fgetcsv(): enclosure must be a character in C:\xampp\htdocs\www\ticket2\model\CSVParser.php on line 100
    La ligne 100 c'est while (($row = fgetcsv($this->handle, $this->buffer, $this->separator, $this->enclosure)) !== false) {Une petite recherche semble dire que dans ce cas, il faudrait utiliser fgets. Mais je crains galérer si je me lance là-dedans. Pourrais-tu regarder ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #24
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Re-Hello,
    j'ai trouvé un bug dans ton code !
    C'est possible, tu sais je ne teste quasiment jamais les codes que je publie sur le forum, alors les étourderies et autres bêtises doivent être légion. Au moins, ça oblige à continuer à utiliser son cerveau

    Pour l'autre souci, ce n'est rien, juste à faire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while (($row = fgetcsv($this->handle, $this->buffer, (string)$this->separator, (string)$this->enclosure)) !== false) {
        $this->data[] = array_combine($this->header, $row);
    }

  5. #25
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai rajouté le cast en string de $this->separate et $this->enclosure, mais le message d'erreur reste...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  6. #26
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $enclosure = empty($this->enclosure) ? chr(8) : $this->enclosure;
    while (($row = fgetcsv($this->handle, $this->buffer, (string)$this->separator, $enclosure)) !== false) {
        $this->data[] = array_combine($this->header, $row);
    }

  7. #27
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Super, mais pourquoi ce code ASCII à 8 ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  8. #28
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    tout simplement parce que la fonction veut absolument avoir un caractère d'encadrement quand bien même il n'y en a pas. Donc je lui passe le premier caractère de la table ASCII qui n'est pas un code utilisé pour le suivi des échanges d'information : le caractère 8 est celui désignant le retour arrière.

  9. #29
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    OK, je vais passer à la classe CSVAnalyse (construction des requêtes SQL à partir du tableau fourni par la classe CSVParser). Quand j'aurai pondu un truc, je reviendrai ici.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #30
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Au fait, j'ai de nouveau eu à utiliser mon cerveau pour modifier ton code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      private function detectCSVType()
        {
            if ( ! empty($this->header)) {
                $col = $this->header[0];
                if (mb_stripos($col, 'SESA') !== false) {
                    $this->csv_type = 'licenses';
                } elseif (mb_stripos($col, 'Ticket') !== false) {
                    $this->csv_type = 'tickets';
                } else {
                    $this->errors[] = 'This file is neither a licence nor a ticket';
                }
            }
            else {
                $this->errors[] = 'This file is neither a licence nor a ticket';
            }
        }
    Le else des lignes 13 à 15 était nécessaire si le csv ne comporte pas de header...(auquel cas, ce que le code a pris pour header n'a rien à voir)
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  11. #31
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    J'ai pris beaucoup de retard, car ton code, qui marchait bien au départ, ne marchait plus depuis hier, et je viens de le modifier à 2 endroits pour parer à des défaillances surprenantes de PHP.

    D'abord, pour trouver le premier caractère de la chaîne de caractères : $char = mb_substr($row, 1, 1); // premier caractère. Il a fallu changer l'index de 0 à 1.

    Ensuite, la fonction ctype_alpha pour savoir si un caractère était alphabétique ne marchait plus (par exemple, P n'était plus alphabétique !). Je l'ai donc remplacée par la méthode suivante :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     private function isAlpha($ch)
        {
            return (preg_match('$^[a-zA-Z+]+$', $ch));
        }

    Je vais enfin pouvoir travailler sur la classe CSVParser...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  12. #32
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut Laurent

    t'es sûr que ctype_alpha() ne fonctionne pas ?
    Si t'as un problème vérifie les en-têtes du fichier et assure toi que tu n'as pas de BOM (utf-8)

  13. #33
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Je viens de trouver comment modifier l'encodage avec PhpStorm et si je mets le fichier en UTF8, ctype_alpha remarche. Et dire que ça m'a coûté pas loin d'une journée (mais j'ai essayé de m'en sortir seul).

    Et les en-têtes de fichier, on peut les afficher comment avec PhpStorm ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  14. #34
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    D'abord, pour trouver le premier caractère de la chaîne de caractères : $char = mb_substr($row, 1, 1); // premier caractère. Il a fallu changer l'index de 0 à 1.
    euh ça me surprend, dans la doc de mb_substr() il est écrit :
    Citation Envoyé par www.php.net
    Le premier caractère est numéroté zéro.
    Donc ton souci vient bien des encodages et remets bien cette ligne de code dans sa version originale.

  15. #35
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Je crois que par inadvertance, au lieu d'ajouter un nouveau post, tu as effacé les derniers ! Néanmoins, dans mon mail, j'avais le lien vers l'image (copie d'écran) que tu me montrais. Oui, j'ai bien ça ; j'avais déjà remarqué mais je croyais avoir l'onglet "Marketplace" uniquement car je venais de faire une recherche d'un plugin nommé "marketplace" ! Cela dit, je me suis souvenu (comme tu as effacé le post) qu'il fallait chercher un plugin nommé "bined". C'est fait et il est installé. Par contre, j'ai oublié la suite. Peux-tu me la redonner ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  16. #36
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    j'ai exporté tes problèmes de PhpStorm dans une nouvelle discussion.

  17. #37
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    euh ça me surprend, dans la doc de mb_substr() il est écrit :

    Donc ton souci vient bien des encodages et remets bien cette ligne de code dans sa version originale.
    J'ai du revenir en arrière et remettre l'index à 1 au lieu de 0...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  18. #38
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    salut laurent,

    il faut te poser la question de l'origine de tes csv.
    un coup c'est du utf-8 un autre ça ne l'est plus, un coup avec BOM un autre sans...
    Pas simple de te suivre

  19. #39
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Salut rawsrc,

    en fait, j'ai changé de fichier CSV car au début, je ne faisais le test qu'avec un seul fichier, et là, j'ai essayé avec un autre. Comme tu m'as expliqué comment faire avec PhpStorm, j'ai inspecté le header des 2 fichiers : le premier est sans BOM mais le second est avec. Il faut donc enlever le BOM du fichier. Je me souviens que jreaux62 m'avait montré une fonction pour ça : https://www.developpez.net/forums/d2...-se-passe-mal/ cf le post 3. Donc en gros, l'algorithme serait :
    1-ouvrir le fichier en écriture
    2-lire la première ligne et retirer le BOM
    3-remplacer la première ligne du fichier par cette nouvelle ligne
    4-refermer le fichier
    A mon avis, c'est ce qu'il faut faire, mais en PHP, surtout l'étape 3, je vois pas...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  20. #40
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    pour retirer les BOM en PHP, c'est un peu ardu.
    Perso j'utilise une fonction perso qui fait le taf (c'est cadeau) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    function removeBOM(string $file)
    {
        $random_name = function() use ($file) {
            $alpha = range('a', 'z');
            shuffle($alpha);
            $alpha = implode('', $alpha);
            $temp  = basename($file);
            return basename($file).substr($alpha, 0, mt_rand(5, 10)).rand(100000, 999999);
        };
     
        if (is_file($file)) {
            $bom = "\xef\xbb\xbf";
            $fh  = fopen($file, 'r');
            $oct = fread($fh, 3);   // read 3 first octets
            if ($oct === $bom) {    // BOM detected
                $temp = dirname($file).DIRECTORY_SEPARATOR.$random_name();
                $size = filesize($file);
                $fc   = fopen($temp, 'w');
                // copy the file octet by octet starting after the BOM
                for ($i = 3 ; $i < $size ; ++$i) {
                    fseek($fh, $i);
                    fwrite($fc, fgetc($fh));
                }
                fclose($fc);
            }
            fclose($fh);
            // rename and keep the old one
            if ($oct === $bom) {
                rename($file, "{$file}.old");
                rename($temp, $file);
            }
        }
    }
    Cette fonction travaille directement sur le fichier.

Discussions similaires

  1. Réponses: 2
    Dernier message: 24/01/2008, 13h48
  2. Réponses: 3
    Dernier message: 03/01/2008, 12h14
  3. pb de lecture dans un fichier CSV
    Par MayOL69bg dans le forum C#
    Réponses: 3
    Dernier message: 23/05/2007, 14h21
  4. Réponses: 3
    Dernier message: 19/05/2007, 17h19
  5. Linges sautées dans "lecture" d'un fichier .csv
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 10/08/2006, 20h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo