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 :

Optimisation de la création d'une newsletter avec ob_start


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Optimisation de la création d'une newsletter avec ob_start
    Bonjour à tous,

    Je suis en train de créer une newsletter et ma question porte sur la génération de la partie html envoyée par email.

    J'utilise les fonctions ob_start(), ob_gets_contents() et ob_get_clean() pour récupérer le code html dans une variable php.

    Mon code fonctionne pour le moment comme ça (en résumé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    - récupération des données de la newsletter
    - récupération de la liste des destinataires
     
    while(boucle listant les destinataires) {
    ob_start();
     
    --- mon code html qui est assez long ---
    $contenu = ob_get_contents();
    ob_get_clean();
     
    mail( ...);
     
    }
    Dans le code html je dois y mettre des variables propre à chaque destinataire, d'où l'appel ob_start à l'intérieur de la boucle.

    Il me semble que le fait d'appeler cette fonction dans la boucle est assez lourd et prend du temps.

    Je pensai à une optimisation (si ça optimise vraiment) :
    Mettre à la place des données de chaque destinataire un mot identifiable, créer la variable $contenu avec ob_start() avant la boucle et faire un str_replace ou preg_replace à l'intérieur de la boucle pour remplacer le mot par les variables du destinataire.

    Pensez-vous que cette optimisation en est vraiment une et rendrait le script moins lourd ?

    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
    je dois y mettre des variables propre à chaque destinataire, d'où l'appel ob_start à l'intérieur de la boucle.
    Je ne vois pas la logique de cette necessité.

    Il me semble que le fait d'appeler cette fonction dans la boucle est assez lourd et prend du temps.
    Je pense que dans ton cas la longueur est dûe à l'imbrication des bufferisations.
    Mais comme j'ai dit au dessus, je ne vois pas pouquoi tu démarres des bufferisations en boucle.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

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

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 102
    Points : 4 448
    Points
    4 448
    Par défaut
    Bonjour @xtremdisc

    il me semble que tu désires juste faire un mini moteur de template.

    Mettre à la place des données de chaque destinataire un mot identifiable, créer la variable $contenu avec ob_start() avant la boucle et faire un str_replace ou preg_replace à l'intérieur de la boucle pour remplacer le mot par les variables du destinataire.
    Une bonne solution ne serait pas d'utiliser directement un moteur de template léger. ce qui apporte une grande souplesse a un système de newsletter et de nouvelles fonctionnalités.
    $moi= ( !== ) ? : ;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je ne vois pas la logique de cette necessité.
    Je pense que dans ton cas la longueur est dûe à l'imbrication des bufferisations.
    Mais comme j'ai dit au dessus, je ne vois pas pouquoi tu démarres des bufferisations en boucle.
    Vu qu'il faut que dans mon contenu de newsletter les liens html doivent avoir l'id du destinataire en paramètre, je ne vois pas comment faire autrement hormis la solution "replace".

    il me semble que tu désires juste faire un mini moteur de template.
    Oui c'est à peu près ça, là c'est juste pour un seul modèle.

    Une bonne solution ne serait pas d'utiliser directement un moteur de template léger. ce qui apporte une grande souplesse a un système de newsletter et de nouvelles fonctionnalités.
    Désolé mais je ne comprend pas vraiment ce que tu veux dire.

    Merci à vous.

  5. #5
    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
    Vu qu'il faut que dans mon contenu de newsletter les liens html doivent avoir l'id du destinataire en paramètre
    Tu ne dis toujours pas pourquoi tu veux démarrer plusieurs fois la bufferisation.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu ne dis toujours pas pourquoi tu veux démarrer plusieurs fois la bufferisation.
    En effet sabotage, désolé je n'avais pas bien compris ce que tu voulais dire.

    C'est plus quelque chose comme ça que je dois faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ob_start();
    while(boucle listant les destinataires) {
     
    --- mon code html qui est assez long ---
    $contenu = ob_get_contents();
    ob_clean();
     
    mail( ...);
     
    }
    ob_end_clean();
    Merci beaucoup, c'est sûr que ça va bien l'alléger.
    Après entre ce système et celui avec replace, une idée du plus rapide ?

  7. #7
    Membre du Club
    Homme Profil pro
    Développeur JAVA/PHP
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur JAVA/PHP

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par xtremdisc Voir le message
    Après entre ce système et celui avec replace, une idée du plus rapide ?
    JE te conseil d'écrire les mails à la main, c'est plus simple & ça évite le code PHP superflux

    Sinon, plus rapide entre quelle et quelle fonction?

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Citation Envoyé par SleTT Voir le message
    JE te conseil d'écrire les mails à la main, c'est plus simple & ça évite le code PHP superflux


    Citation Envoyé par SleTT Voir le message
    Sinon, plus rapide entre quelle et quelle fonction?
    Entre faire un ob_get_contents dans la boucle ou un seul avant la boucle et faire replace dans la boucle.

    Merci

Discussions similaires

  1. Création d'une table avec foreign key.
    Par Paulinho dans le forum Débuter
    Réponses: 6
    Dernier message: 01/12/2005, 18h47
  2. création d'une carte avec navigation du type mappy
    Par BernardT dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 30/10/2005, 01h24
  3. Création d'une table avec foreign key
    Par lepierre dans le forum Langage SQL
    Réponses: 5
    Dernier message: 17/09/2004, 14h20
  4. [Débutante] Création d'une image avec un composant
    Par gwendo dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/07/2004, 09h58
  5. Création d'une base avec IbConsole
    Par Lucien dans le forum Outils
    Réponses: 3
    Dernier message: 02/03/2004, 18h34

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