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 :

Lenteur du temps d'exécution de ma boucle while avec la Librairie LIBPHONENUMBER


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut Lenteur du temps d'exécution de ma boucle while avec la Librairie LIBPHONENUMBER
    BONSOIR.

    Je ne sais pas si c'est moi qui code mal mais vraiment la lenteur de mon la code avec la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) + le formatage de mes numéros selon le pays est d'un casse-tête qui ne dit même pas son nom.

    En fait, j'essaie de générer une liste de numéro parsés avec la Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) en me servant de la boucle while.

    Avec une simple boucle while de génération de Numéros sans inclure la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) tel que le code ci-dessous, il prend avec succès, seulement quelques Millisecondes pour générer une liste de 1000000 de Numéros sans problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $i = 900000000;
    $iEnd = $i + 1000000;
    $string = '';
    while ($i <= $iEnd) {
    	$string .= "+225". $i."\r\n";
    	$i++;
    }
    file_put_contents('generated.txt', $string);

    Mais LE PLUS GROS SOUCI, c'est lorsque j'inclus la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php) exactement comme dans le code suivant, cela fait une éternité avant de se générer:

    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
    // chargement de la librairie
    require_once("vendor/autoload.php");
    // instanciation de la class PhoneNumberUtil
    $phoneUtil = \libphonenumber\PhoneNumberUtil::getInstance();
     
    $i = 03000000;
    $iEnd = $i + 1000000;
    $string = '';
    while ($i <= $iEnd) {
    	$string .= $i."\r\n";
    	$parse    = $phoneUtil->parse($string, "CI");
    	$isValid = $phoneUtil->format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
    	$i++;
    }
    file_put_contents('generated.txt', $isValid);

    Vraiment, j'implore votre clémence, aidez-moi s'il vous plaît à corriger ma boucle while de sorte à ce qu'elle genère TRES RAPIDEMENT les 1000000 Numéros parsés avec la Librairie Libphonenumber-For-PHP (https://github.com/giggsey/libphonenumber-for-php).

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Avant de t'interroger sur les performances, vérifie d'abord que ton code fonctionne avec 5 numéros.


    Une partie de ton dernier code commenté:
    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
    /* 03000000 est la notation octale de 786432, est-ce vraiment ce que tu veux? */
    $i = 03000000; 
    $iEnd = $i + 1000000;
    $string = '';
     
    /* pour aller d'un entier à un autre par incrémentation,
       la boucle for est plus adaptée */
    while ($i <= $iEnd) { 
    	$string .= $i."\r\n"; // $string .= "$i\r\n";
    	// pourquoi ces crochets ] à la place des > ?
    	// parse($string, "CI") que contient $string?
    	$parse    = $phoneUtil-]parse($string, "CI");
    	$isValid = $phoneUtil-]format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
    	$i++;
    }
    Si je devais faire la même chose, j'utiliserai fopen et fwrite à la place de file_put_content pour écrire au fur et à mesure dans le fichier, plutôt que de créer une chaîne de caractères géante.

    Je ne sais pas ce que tu espères de ces deux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $parse    = $phoneUtil-]parse($string, "CI");
    $isValid = $phoneUtil-]format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
    Peut-être serait-il plus simple de poster les premières lignes du fichier que tu souhaites obtenir.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2013
    Messages
    453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2013
    Messages : 453
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Je ne sais pas ce que tu espères de ces deux lignes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $parse    = $phoneUtil-]parse($string, "CI");
    $isValid = $phoneUtil-]format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
    Peut-être serait-il plus simple de poster les premières lignes du fichier que tu souhaites obtenir.
    Bonjour.

    Mon code chez moi c'est bien sûr avec des > et non ]. Et il fonctionne très bien sauf que le problème de lenteur se pose grave.

    Je ne sais pas à quel moment cette erreur est survenue sinon chez moi, c'est comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $parse    = $phoneUtil->parse($string, "CI");
    	$isValid = $phoneUtil->format($parse, \libphonenumber\PhoneNumberFormat::E164); // Format E164
    Comment résoudre le problème de lenteur svp ????

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Pourquoi tu concatènes $string ? $string .= "+225". $i."\r\n";C'est sur qu'à la fin elle doit être immense vu que que tu réinitalises jamais la variable $string.

    D'ailleurs au passage ton code ne marche tout simplement pas chez moi, avant tout problème de lenteur...

Discussions similaires

  1. Exécuter 2 boucles while avec deux variables en même temps.
    Par gagnant16 dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 16/04/2014, 22h04
  2. Poursuivre l'exécution d'une boucle while()
    Par Hobbèse dans le forum Débuter
    Réponses: 14
    Dernier message: 01/02/2014, 00h31
  3. Réponses: 0
    Dernier message: 20/04/2011, 14h51
  4. Réponses: 1
    Dernier message: 06/05/2008, 13h32
  5. Afficher un waitbar pendant l'exécution d'une boucle while
    Par LMU2S dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 18/03/2008, 19h22

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