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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut $Hello_world of php.
    Dans un premier temps, bonjour à tous.

    Si je décide de poster dans votre forum aujourd'hui, c'est pour un problème plutôt récurent, un caractère invisible qui vient se placer à la fin d'une variable lors d'une incrémentation++;
    Je vais détailler du mieux possible mon problème et les tests que j'ai effectué via l'aide d'une autre communauté, ou de moi même.

    Le code :

    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
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
    	<head>
    		<title>Index.</title>
    		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     
    	</head>
    	<body>
    		<?php
    		$monfichier = fopen('compt.txt', 'r+');
     
    		$pages_vues = fgets($monfichier);
    		$pages_vues++;
    		fseek($monfichier, 0);
    		fputs($monfichier, $pages_vues);
     
    		fclose($monfichier);
     
    		echo'<p>Cette page a été vue ' . $pages_vues . ' fois !</p>;
    		?>
     
     
    	</body>
    </html>
    Infos :

    Os : Linux Ubuntu 9.10 karmic.
    Navigateur : FireFox 3.5.8.
    Environnement de dev : Xampp.
    Version de php : 5.3.1.
    -----------------------
    Apparition du bug : uniquement avec l'incrémentation de forme $pages_vues++;
    Other : Les formes $pages_vues+=1; $pages_vues = $pages_vues + 1; fonctionnent.
    var_dump($pages_vues) : (avec le fichier texte initialisé à 0) Retourne cela : string(2) "0 "
    Fichier texte initialisé à 0 via : (je n'ai pas touché à l'encodage de ces éditeurs de textes) gEdit, gVim, jEdit.

    J'ai remarqué que, si j'écrivais dans le fichier .txt via un script php, l'incrémentation de forme $pages_vues++; fonctionnait sans poser de problèmes.
    En ayant parcouru votre forum, je suis tombé sur la fonction ord pour identifier le caractere mystérieux, je n'ai pas su l'adapter (je débute en php depuis quelques jours).

    Je joints mes deux fichiers sous un unique zip, si jamais vous voulez voir l'encodage du fichier par exemple.
    En espérant avoir des infos pour résoudre ce facheux probleme.
    Fichiers attachés Fichiers attachés
    Dernière modification par Jannus ; 20/03/2010 à 14h59. Motif: Abus de mise en forme

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    278
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 278
    Par défaut
    Mais le problème se situe ou? Lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo'<p>Cette page a été vue ' . $pages_vues . ' fois !</p>;
    Tu obtiens quoi?

    Je comprend pas bien le problème perso

    EDIT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Si tu transforme ta chaine en int le caractère dont tu aprle devrait disparaitre non?
    $pages_vues = intval($pages_vues)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Hello, oui en effet forcer le type contourne le probleme, je dis bien contourne, car les gens a qui je donne le script n'ont pas besoin de faire cela, et moi visiblement je le suis.

    J'ai tout expliqué on ne peut pas plus clairement sinon.

  4. #4
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Je vois pas de problème par contre ton script ne marche pas chez moi, je suis obligé de remplacer "$pages_vues++;" par "$pages_vues+=1;"

    EDIT : J'ai retapé ton code en entier et maintenant ça fonctionne, j'ai déjà eu un truc du genre une fois, en retapant très exactement le problème disparaît...

    Essaye d'utiliser mon fichier pour voir
    Fichiers attachés Fichiers attachés

  5. #5
    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
    Par défaut
    Salut

    Etant donné que $pages_vues vient des données du fichier "compt.txt", c'est ce fichier qui contient le caractère étrange. Enfin, théoriquement.

    Ensuite, je vois que tu utilise du utf-8, alors peut être y a t-il une cause à effet.
    Selon l'éditeur de texte, il se peut qu'il insère des caractères pour le spécifier : le BOM.
    Si c'est le cas, faudrait créer un fichier en spécifiant : sans BOM, ou alors en l'ouvrant avec un éditeur qui affichera ces caractères et qui permettra de les supprimer.

    A titre d'exemple, en créant un nouveau fichier avec le bloc note en UTF-8, il insère ces caractères, mais je ne le vois.
    En l'ouvrant avec un autre éditeur (comme PsPad), je les vois, c'est ceci : 


    Pas certain que ce soit ça ton problème, mais sait on jamais.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    A priori c'est un "bug" logique, sans l'être, mais en l'étant un peu quand même.

    Tout élément externe à un script, donnée récupérée d'une DB, d'un fichier, en get/post ou autre est tout d'abord typé en string. PHP est souple sur les conversions ce qui fait que String + 1 est automatiquement casté (String + int => int), String++ par contre ne l'est pas.

  7. #7
    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
    Par défaut
    PHP est souple sur les conversions ce qui fait que String + 1 est automatiquement casté (String + int => int), String++ par contre ne l'est pas.
    Tu en est sûr de ça ?

    Si je fais (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $pages_vues = (string)'5';
    $pages_vues++;
    echo '$pages_vues : '.$pages_vues;
    Affiche -> $pages_vues : 6

    Même en "forçant" le type à string et en plus mis entre quote, l'incrémentation ce fait.
    Donc Php le "caste" comme tu le dis, même pour un string clairement défini.

    J'ai peut être mal compris, ceci dit

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