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 :

$Hello_world of php.


Sujet :

Langage PHP

  1. #21
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Pour revenir à ton code, je lis ceci dans la doc concernant fgets() :
    Si aucune longueur n'est fournie, la fonction lira le flux jusqu'à la fin de la ligne.
    Faudrait peut être fixer une valeur, genre 4096.

    Ou alors, te baser sur le code d'exemple fourni dans la doc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $handle = @fopen("/tmp/inputfile.txt", "r");
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            echo $buffer;
        }
        fclose($handle);
    }
    La doc -> http://fr2.php.net/manual/fr/function.fgets.php

  2. #22
    Invité
    Invité(e)
    Par défaut
    Ouai mais ca contourne le probleme, c'est pas vraiment une solution. Actuellement mes OS sont en francais, passer en anglais pourrait résoudre le probleme?

    Edit : Non, ca ne résoud pas le probleme.
    Dernière modification par Invité ; 18/03/2010 à 20h02.

  3. #23
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Finalement après moult expérimentations, il apparait que si le fichier a été créé par PHP, ça roule. L'entier lu dans le fichier est automatiquement converti lors de l'incrémentation.
    Par contre s'il a été créé par n'importe quel éditeur ou même en ligne de commande (tout utf-8), ça foire.

    Probablement donc un problème lié à l'encodage du fichier que php gère mal.

  4. #24
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Par contre s'il a été créé par n'importe quel éditeur ou même en ligne de commande (tout utf-8), ça foire.
    Tu dis que ça foire, mais est ce que Php retourne une erreur ?

    En tout cas j'ai effectué cet essai sur Xubuntu (Xubuntu 9.10 / Xampp 1.7.3a / Php5.3.1), je n'ai pas rencontré ce problème.
    Avec un éditeur basique comme mousepad (même genre que le bloc note).

    Etonnant comme phénomène. Je n'ai pas d'explication, à part au feeling comme ça je dirais qu'il y aurait un problème d'encodage.


    Juste comme ça, faudrait voir si le fichier à été ouvert correctement avec le fopen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $monfichier = fopen('compt.txt', 'r+');
    var_dump($monfichier);

  5. #25
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Juste comme ça, faudrait voir si le fichier à été ouvert correctement avec le fopen :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $monfichier = fopen('compt.txt', 'r+');
    var_dump($monfichier);
    Ce qui nous donne :

    resource(3) of type (stream)

    Cette page a été vue 0 fois !

  6. #26
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Essai ce code pour voir :
    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
     
    $handle = @fopen('compt.txt', 'r');
    if ($handle) {
        while (!feof($handle)) {
            $buffer = fgets($handle, 4096);
            //
            $nb1 = strlen($buffer);
            $nb2 = mb_strlen($buffer, 'UTF-8');
            echo '('.$nb1.'-'.$nb2.') ';
            //
            $chaine = str_split($buffer);
            foreach ($chaine as $caractere) {
    					echo '-'.$caractere.'('.ord($caractere).')-';
    				}
    				//
    				echo '<br />';
        }
        fclose($handle);
    }
    Mais as tu lu la remarque de Petibidon, et essayé ?

  7. #27
    Invité
    Invité(e)
    Par défaut
    Oui oui, j'ai procédé a ce test avant meme d'écrire un sujet sur votre forum.

    Résultat de ton script :

    (2-2) -0(48)-- (10)-
    (0-0) -(0)-

  8. #28
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je ne sais pas trop quoi en conclure.

    En ASCII :
    48 c'est 0
    10 c'est un saut de ligne (LF)

    Par contre, je ne sais pas pourquoi tu as une autre ligne avec 0 (null).

    Peut être que lorsque le contenu de la ligne est récupérée, et bien même le saut de ligne est contenu dans la chaine, ce qui dérouterait l'incrémentation.
    Je ne vois pas d'autres explications.


    Ce saut de ligne ne devrait pas y être normalement.


    Un énième test serait d'utiliser w (au lieu de r+), et supprimer le fichier.
    La première fois que le script sera exécuté, ça va créer le fichier, et il devrait être vide.
    Ensuite, faire une vérification du contenu. Si il est vide, on met 0, sinon on incrémente.

  9. #29
    Invité
    Invité(e)
    Par défaut
    Je veux bien le faire, mais y'a t'il un moyen de configurer les éditeurs de textes pour résoudre ce probleme?
    Et aussi, ce probleme n'est présent que pour les fichiers de textes non? Dès que c'est un fichier de codes interprété / compilé, ca ne doit plus poser de problemes?
    Je commence a avoir des doutes...

  10. #30
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je veux bien le faire, mais y'a t'il un moyen de configurer les éditeurs de textes pour résoudre ce probleme?
    J'en sais rien malheureusement, je n'ai jamais remarqué se problème, même en faisant des essai Window et Xubuntu, et quelque soit l'éditeur.

    Et aussi, ce probleme n'est présent que pour les fichiers de textes non? Dès que c'est un fichier de codes interprété / compilé, ca ne doit plus poser de problemes?
    Ton cas est particulier, ce qui fait que le type de fichier (l'extension) n'a aucune importance, tu peux même ne pas indiquer d'extension.
    C'est simple, le fichier n'est pas exécuté, le code ouvre le fichier, récupère la 1ère ligne, et tente d'incrémenter, réécrit la 1ère ligne, ferme le fichier. C'est tout.


    A force, je me dis que ton problème est peut être plus simple qu'il n'y parait.
    La source du problème c'est ce saut de ligne, le LF (Line Feed).
    Que ce saut de ligne soit créé dès la création du fichier par l'éditeur, ou lié au système, que sais je, et bien c'est pas grave, suffit de supprimer ce saut de ligne, un point c'est tout, avec quelque soit les moyens (éditeur, ligne de commande, peu importe).


    J'ai fais un essai en le rajoutant, ça par en sucette, ça fait pas un pli.
    Dès que je le supprime, l'incrémentation se fait correctement.
    La suppression de ce caractère élimine le problème.


    Cependant, quand on y réfléchi, tout ceci est quelque part un faut problème, car si un jour (ou par exemple) tu dois lire un fichier ayant plusieurs chiffres et ça sur chaque ligne, ce même problème se posera, car à chaque ligne il y aura ce caractère de saut de ligne, quelque soit l'OS. Même pire, le(s) caractère(s) est différent selon l'OS (2 caractères sur Windows).
    Pour pouvoir récupérer uniquement les chiffres, il n'y aura pas d'autre moyens que de supprimer le saut de ligne, ou faire en sorte de le repérer et l'ignorer.


    Un dernier essai qui à mon sens est simple, c'est d'utiliser la fonction trim() avant d'incrémenter.
    Ca fonctionne même avec le saut de ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $monfichier = fopen('compt.txt', 'r+');
     
    $pages_vues = fgets($monfichier, 4096);
    $pages_vues = trim($pages_vues);
    $pages_vues++;
    fseek($monfichier, 0);
    fputs($monfichier, $pages_vues);
    La solution qui avait été donnée au tout début -> intval() fonctionne tout aussi bien d'ailleurs.

  11. #31
    Invité
    Invité(e)
    Par défaut
    Ce que je ne comprends pas c'est que j'en ai modifié des tas de fichiers texte sous linux, beaucoup de parametres d'applications etc, et ca n'a jamais posé de soucis.
    Ca me rend un peu fou ce problemes, en plus le peu d'info que je trouve pour changer le mode de gVim, ca ne fonctionne pas.

    Pour ton test ca fonctionne ouai.

    @RunCodePhp
    Je n'ai pas ce genre de problemes sous windows, et a vrai dire je n'ai pas vu grand monde l'ayant sous linux. Visiblement, moi j'ai deux pc sous ubuntu et j'ai deux fois ce probleme.

Discussions similaires

  1. [EDI] Quel est l'éditeur que vous recommandez pour PHP ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 400
    Dernier message: 10/04/2018, 20h08
  2. Quel est le meilleur script PHP de portail (CMS) ?
    Par Lana.Bauer dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 187
    Dernier message: 18/10/2012, 07h45
  3. L'avenir est-il au PHP ?
    Par Manolo dans le forum Langage
    Réponses: 468
    Dernier message: 11/02/2008, 18h54

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