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 :

probleme avec explode()


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut probleme avec explode()
    Bonjour,

    Voila j'ai besoin de récupérer le MOTD de la chaine suivante.
    Elle est stockée dans la variable $buffer que je rempli de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    while(!feof($socket)) //Tant que l'on est connecté :
    			{
     
    				$buffer = fgets($socket, 1024); //On récupère une ligne de données
    				if(strpos($buffer, "372")) //if 372 is contained in the line.
    				{
    					$buffer_parts = explode("372", $buffer);
    					$motd = explode(" ", $buffer_parts[2]);
    					actualiser();
    					echo $motd;
    				}*/
    			}
    Mon souci est que lorsque je veux récupérer mes chaines avec la fonction au dessus j'ai juste une page blanche en retour.
    Voici le contenu de $buffer.

    :wormnet1.team17.com 001 qsdfd :Welcome to the Internet Relay Network qsdfd :wormnet1.team17.com 002 qsdfd :Your host is wormnet1.team17.com[wormnet1.team17.com/6667], running version 2.8/hybrid-6.3.1 :wormnet1.team17.com 003 qsdfd :This server was created Thu Nov 14 2002 at 20:06:04 GMT :wormnet1.team17.com 004 qsdfd wormnet1.team17.com 2.8/hybrid-6.3.1 oOiwszcrkfydnxb biklmnopstve :wormnet1.team17.com 005 qsdfd WALLCHOPS PREFIX=(ov)@+ CHANTYPES=#& MAXCHANNELS=20 MAXBANS=25 NICKLEN=15 TOPICLEN=120 KICKLEN=90 NETWORK=EFnet CHANMODES=b,k,l,imnpst MODES=4 :are supported by this server :wormnet1.team17.com 251 qsdfd :There are 107 users and 1 invisible on 1 servers :wormnet1.team17.com 252 qsdfd 1 :IRC Operators online :wormnet1.team17.com 254 qsdfd 4 :channels formed :wormnet1.team17.com 255 qsdfd :I have 108 clients and 0 servers :wormnet1.team17.com 265 qsdfd :Current local users: 108 Max: 174 :wormnet1.team17.com 266 qsdfd :Current global users: 108 Max: 174 :wormnet1.team17.com 250 qsdfd :Highest connection count: 174 (174 clients) (2367105 since server was (re)started) :wormnet1.team17.com 375 qsdfd :- wormnet1.team17.com Message of the Day - :wormnet1.team17.com 372 qsdfd :- Welcome to WormNet. :wormnet1.team17.com 372 qsdfd :- :wormnet1.team17.com 372 qsdfd :- Both Wormnet1 and Wormnet2 now run from a single upgraded machine. :wormnet1.team17.com 372 qsdfd :- :wormnet1.team17.com 372 qsdfd :- For more information on the current beta patch & upgrade, visit :wormnet1.team17.com 372 qsdfd :- http://wormsarmageddon.team17.com, or visit the Team17 Forum :wormnet1.team17.com 372 qsdfd :- http://forum.team17.com :wormnet1.team17.com 372 qsdfd :- :wormnet1.team17.com 372 qsdfd :- Anyone using a non-authorized client to connect to this :wormnet1.team17.com 372 qsdfd :- network will have their IP temporarily banned. :wormnet1.team17.com 372 qsdfd :- :wormnet1.team17.com 372 qsdfd :- All traffic may be recorded and/or monitored by Team17 :wormnet1.team17.com 372 qsdfd :- to ensure proper operation. :wormnet1.team17.com 376 qsdfd :End of /MOTD command
    Pourtant à priori c'est bien 2chaines après le nombre que je veux récupérer les lignes.

    Savez vous pourquoi ?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as 1185 caracteres avant le premier 372, tu dois donc etre apres ta limite de 1024 octet sur le fgets.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Bonjou, merci pour la réponse, mais lorsque je modifie mon code en :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			while(!feof($socket)) //Tant que l'on est connecté :
    			{
    				$buffer = fgets($socket, 2048); //On récupere une ligne de données
                                    //echo $buffer;
    				$motd = explode(' ', $buffer);
    				if ($motd[2] == "372")
    				{
    					echo "motd : " . $motd;
    				}
    				actualiser();
    			}
    Ma page ne cesse de charger indéfiniment, pourtant si j'enleve le commentaire //echo $buffer; lui s'affiche.

  4. #4
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Que fais actualiser ?
    Pourquoi faire un "echo $motd" alors que $motd est un array ?

    Tu n'as pas besoin de préciser de length à fgets puisque tu es sûr d'avoir un retour chariot

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Merci pour ces précisions.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function Actualiser()
    {
    	ob_flush();
    	flush();
    }
    Ça me permet d'afficher le texte, auquel cas sinon je dois attendre le timeout pour voir le texte...

    Effectivement, toutes les docs font un echo sur l'array pour l'afficher, ou j'ai peut être halluciné.
    Que conseillez vous ?

  6. #6
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Pourquoi utiliser ob_flush() ? Tu utilises l'output buffering ?

    Effectivement, toutes les docs font un echo sur l'array pour l'afficher, ou j'ai peut être halluciné.
    Que conseillez vous ?
    ha ? J'aimerais bien voir quelle genre de documentation

    Afficher un array => Array

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par |PaRa-BoL Voir le message
    Pourquoi utiliser ob_flush() ? Tu utilises l'output buffering ?
    Non, enfin peut être, je sais pas, c'est le 1er moyen que j'avais trouvé qui me rafraichissais mon texte, j'avais pas jugé utile d'en chercher un autre.
    Pourquoi, ce n'est pas super ? .

    Citation Envoyé par |PaRa-BoL Voir le message
    ha ? J'aimerais bien voir quelle genre de documentation

    Afficher un array => Array
    Exacte, j'avais fais une grosse bourde...

    Merci pour ce que tu m'as dit plus haut, tu m'as complètement débloqué la situation. Mon code en est la.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(!feof($socket)) //Tant que l'on est connecté :
    			{
    				$buffer = fgets($socket); //On récupere une ligne de données
    				//echo $buffer;
    				if(strpos($buffer, "372")){
    					$motd = explode(' ', $buffer);
    					echo "$motd[4] </br>";
    				}
    				actualiser();
    			}
    Ça me permet donc de récupérer les bonnes lignes à partir du bon mot, mais le souci c'est qu'il ne prends qu'un mot, héhé...

  8. #8
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Non, enfin peut être, je sais pas, c'est le 1er moyen que j'avais trouvé qui me rafraichissais mon texte, j'avais pas jugé utile d'en chercher un autre.
    Pourquoi, ce n'est pas super ? .
    flush() suffit. ob_flush() a une toute autre utilités.

    Ça me permet donc de récupérer les bonnes lignes à partir du bon mot, mais le souci c'est qu'il ne prends qu'un mot, héhé...
    Tu peux spécifier un 3eme paramètre à explode. Essaye de mettre 5 en dernier paramètre.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 189
    Points : 65
    Points
    65
    Par défaut
    C'est bon tout est mis correctement, merci à tous .
    A bientôt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec la copie des surfaces
    Par Black_Daimond dans le forum DirectX
    Réponses: 3
    Dernier message: 09/01/2003, 10h33
  2. Problèmes avec le filtrage des ip
    Par berry dans le forum Réseau
    Réponses: 9
    Dernier message: 30/12/2002, 07h51
  3. probleme avec la touche F10
    Par b.grellee dans le forum Langage
    Réponses: 2
    Dernier message: 15/09/2002, 22h04
  4. Probleme avec fseek
    Par Bjorn dans le forum C
    Réponses: 5
    Dernier message: 04/08/2002, 07h17
  5. [Kylix] probleme avec un imagelist
    Par NicoLinux dans le forum EDI
    Réponses: 4
    Dernier message: 08/06/2002, 23h06

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