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 :

Scan chaîne caractère mail


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Scan chaîne caractère mail
    Bonjour,

    je cherche à scanner les caractères contenu dans l'objet d'un mail ainsi que dans le corps et le comparé avec des mot clé contenu dans une base de données.

    le problème est que la comparaison est beaucoup trop lente

    première tentative avec mb_eregi => timme limit exceeded même avec 200 secondes
    preg_match => même combat


    après quelque recherche j'ai finalement trouver que mb_eregi est désormais obsolète, ce qui peut expliquer un peu la chose.

    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
    function Scan_mail($client,$inbox){ 
     
     
    $nMessages = imap_num_msg($inbox); 
     
    for($index=1; $index <= $nMessages; $index++){ 
    $header = imap_header($inbox, $index); 
    $corps= imap_body($inbox,$index); 
     
     
     
    if (preg_match('#'.$client.'#',"value=".$header->subject)|| 
    preg_match('#'.$client.'#',"value=".$corps)) { 
    echo 'reussi pour ' . $client. '<BR/>'; 
    } 
    } 
    }
    avec l'utilisation de strpbrk() il me détecte plusieurs fois le même mot dans un seul mail alors que celui ci n'y est qu'une fois

    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
    function Scan_mail($client,$inbox){
     
     
    $nMessages = imap_num_msg($inbox);
     
    for($index=1; $index <= $nMessages; $index++){
    	$header = imap_header($inbox, $index);
    	$corps= imap_body($inbox,$index);
     
    	if  (strpbrk($client,$header->subject)||
    	strpbrk($client.$corps)) {	
                echo 'reussi pour ' . $client. '<BR/>';
    	}
     
    }}

    un petit coup de main pour un pauvre stagiaire en perdition ?

  2. #2
    Membre averti

    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2011
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Juin 2011
    Messages : 205
    Points : 409
    Points
    409
    Billets dans le blog
    1
    Par défaut
    http://php.net/strpbrk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string strpbrk ( string $haystack , string $char_list )
    strpbrk() recherche l'ensemble de caractères char_list dans la chaîne haystack.
    Autrement dit, dans strpbrk($client,$header->subject) il cherche à trouver $header->subject dans $client. Avec le preg_match, tu faisais l'inverse (recherche de client dans subject)...Attention à bien lui donner les paramètres dans le bon ordre !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strpbrk($client.$corps)
    Le point concatène $client et $corps, tu ne passes donc qu'un seul paramètre à strpbrk là
    si ce post vous a été utile, si votre problème est résolu.
    Pensez-y !
    __________________________________
    Doc officielle PHP | FAQ PHP | Cours PHP

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Oulala
    que de vilaine faute de frappe et de compréhension, je t'en remercie.

    desormais j'obtient un résultat plus important qu'avant mais même avec un set_time_limit(120); je ne parvient pas à comparer entièrement le contenu de mes mails à ma base données.

    je pense qu'il sagit donc d'optimisation du code là, strpbrk n'est pourtant pas gourmand non ?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour Keuha,

    Peut-être une piste : dans ton script je vois que tu boucles sur tous tes mails ... combien y en a-t-il ? ( c'est peut-être bête comme question mais qui sait )

    As-tu essayés avec la fonction strpos() ( peut-être plus rapide qu'une regex )

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour Casus,

    actuellement j'ai 70 mails et évidement ce chiffre va croissant.
    Pour cela je mettrai une condition pour scanner uniquement les mails du jour soit environ une trentaine.
    je vais faire un tour du coter de strpos() merci du conseil

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour, pour vous avertir que mon problème est en partie résolu.
    pour le trop grand nombre de mail je ne récupère que ceux du jour
    et pour éviter d'avoir une time limite exceeded je stock toute mes données nécessaire dans ma base de données.
    ce qui me permet de pouvoir fermer la connexion à la boite mail (qui freinais considérablement le traitement)
    je me sert toujours de mb_eregi par contre bien que celle ci est voué à disparaître.
    merci de tout vos coup de mains

Discussions similaires

  1. [Shell] Extraction chaîne caractère
    Par tonio45312 dans le forum Linux
    Réponses: 4
    Dernier message: 29/05/2008, 09h45
  2. Réponses: 9
    Dernier message: 16/02/2007, 21h37
  3. Isoler chaîne caractères regexp
    Par calitom dans le forum Langage
    Réponses: 4
    Dernier message: 08/02/2007, 16h02
  4. [Mail] Encodage caractère mail
    Par dahu29 dans le forum Langage
    Réponses: 2
    Dernier message: 17/10/2006, 00h04
  5. Comparaison d'une chaîne caractère
    Par schtroumpf_farceur dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 19h25

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