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 :

Script Compteur en ligne - Parse error


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Mars 2008
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 178
    Points : 56
    Points
    56
    Par défaut Script Compteur en ligne - Parse error
    Bonjour,

    J'ai télécharger ce petit script de compteur live

    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
    34
    35
    <?php
    $timeout=300; /* 5 minutes */
    $script_dir="";
     
    include($script_dir."userdata.php");
     
    $timestamp=time();
    $included="false";
    for($i=0;$i<count($cur_users);$i++)
    {
    $u_arr=explode("|",$cur_users[$i],strlen($cur_users[$i]));
    if(($timestamp-$u_arr[1]) > $timeout ) $cur_users[$i]="";
    if($u_arr[0]==$REMOTE_ADDR)$included="true";
    }
     
    if($included=="false")$cur_users[$i]=$REMOTE_ADDR."|".$timestamp;
     
    $fp=fopen($script_dir."userdata.php","w");
    fwrite($fp,"<?php \r\n \$cur_users=array(",strlen("<?php \r\n \$cur_users=array("));
    $users_online=0;
    for($i=0;$i<count($cur_users);$i++)
    {
    if($cur_users[$i]!="") {
    fwrite($fp,'"'.$cur_users[$i].'"',strlen('"'.$cur_users[$i].'"'));
       if($i<count($cur_users)-1)fwrite($fp,",",strlen(","));
          $users_online++;
        }
    }
    if($users_online==0)$users_online=1;
     
    fwrite($fp,") ?>",strlen(") \r\n?>"));
    fclose($fp);
     
    echo "$users_online";
    ?>
    Il marche très bien sauf que parfois j'ai des parse error dans le fichier userdata.php qui bloquent donc tout mon site. Lorsque je regarde le fichier userdata.php je remarque qu'en fait il arrive parfois qu'à la fin de mon fichier il ne se termine pas bien et j'ai ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ....,"192.168.0.1|1257847645")"192.168.0.2|1257847646") ?>
    
    au lieu de 
    
    ....,"192.168.0.1|1257847645","192.168.0.2|1257847646") ?>
    J'ai essayé de modifier le code mais j'ai pas réussi à faire en sorte d'éviter ce parse error. L'idée c'est donc de mettre un test pour dire que si dans userdata.php j'ai un parse error, qu'il m'affiche indisponible au lieu du beug.

    Est ce que cela est possible en php si oui, quelqu'un peut-il m'orienter ? Merci

  2. #2
    Membre éclairé
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Points : 654
    Points
    654
    Par défaut
    je te conseille de changer de script, c'est horrible d'écrire du php dans un fichier pour ensuite l'intégrer dans un autre : horrible, horrible, horrible... pour des raisons pratiques (voir ton problème :p) et ya aussi l'aspect sécurité...

    bref, tu pourrais plutôt écrire dans un fichier txt les données sur les connectés et les traiter avec un script php proprement. comme ca, ton site ne plantera pas pour ca ^^

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    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 470
    Points : 5 831
    Points
    5 831
    Billets dans le blog
    1
    Par défaut
    Salut,

    ton script PHP a l'air compliqué, mais pour faire un compteur, j'avais fait beaucoup plus simple (en utilisant une base de données MySQL). Un exemple qui ne plante jamais. Si ça t'intéresse, je peux te dire comment j'avais fait.

  4. #4
    Membre éprouvé Avatar de Herode
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Points : 933
    Points
    933
    Par défaut
    Ce script est cradingue au possible. Une vraie horreur. Le PHP est sale, l'algorithme est sale. Si j'avais à corriger ça sur une copie de cours, je peux te dire que le coupable m'entendrait gueuler. Je sais bien qu'on trouve de plus en plus souvent ce genre de bouillie sur le web, même sur des sites prétendument professionnels, mais tout de même c'est regrettable de publier ça. Du coup les débutants, tombant dessus, s'imaginent que c'est un mode de programmation normal et la bouillie se répand.

    Bref. Pour en revenir à la question, 3 choses :

    1 - au niveau de la boucle entre le fopen et le fclose, le fwrite passe comme argument la longueur de la chaîne à écrire. C'est rarement utile (voir le manuel PHP à ce sujet) et ici, c'est même faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fwrite($fp,") ?>",strlen(") \r\n?>"));
    fclose($fp);
    Or, si tu essayes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    echo strlen(") ?>"), "<br/>";
    echo strlen(") \r\n?>"), "<br/>";
    ?>
    tu verras que les deux echos ne donnent pas le même résultat. L'explication est, là aussi, dans le manuel PHP.

    2 - ce script, à l'évidence, ne gère pas les accès concurrents. Que se passe t'il si jamais deux utilisateurs déclenchent le script en même temps ? Comment peux-tu être certain que les deux boucles contenant les fwrite, qui vont fonctionner en parallèle, ne vont pas foutre le fichier en l'air ? Le risque est faible, certes, tant que le site a peu de visiteurs, mais non négligeable.

    3 -
    Citation Envoyé par yamatoshi Voir le message
    J'ai essayé de modifier le code mais j'ai pas réussi à faire en sorte d'éviter ce parse error. L'idée c'est donc de mettre un test pour dire que si dans userdata.php j'ai un parse error, qu'il m'affiche indisponible au lieu du beug.
    Tu fais ce que tu veux sur ton site, bien sûr, mais un bug, un warning ou n'importe quelle anomalie, ça se corrige, ça ne se cache pas dans un coin. Du moins si on veut faire du développement dans les règles de l'art. De toutes manières, si l'interpréteur n'est pas capable de lire ton fichier, ca va planter. Il n'y a pas moyen d'éviter ça, sauf... en écrivant du code PHP propre qui ne plante pas.

    Pour conclure, mon conseil est de : ré-écris tout ça proprement en partant de 0 ou charge un autre script mais en tout cas, mets celui-ci à la poubelle sans hésitation.

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/02/2015, 21h37
  2. [TCPDF]Parse error ligne 182 du tcpdf.php
    Par Mikounours dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 11/04/2013, 13h56
  3. Parsing error ligne 37
    Par abdelilah dans le forum Langage
    Réponses: 9
    Dernier message: 12/03/2009, 10h01
  4. [Mail] Parse error dans mon script de mailer
    Par Le Parrain dans le forum Langage
    Réponses: 6
    Dernier message: 30/06/2006, 16h08
  5. Parse error: unexpected $ sur la dernière ligne..
    Par zamoto dans le forum Langage
    Réponses: 6
    Dernier message: 01/06/2006, 13h16

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