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 :

[Mail] Envoyer un mail à plus de 100 users avec un for : c'est trop long


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut [Mail] Envoyer un mail à plus de 100 users avec un for : c'est trop long
    J'ai créer une fonction qui envoie un mail a plus de 100 user et ca prend un temps fou a exécuter ensuite ca plante. Quand j'exécute la page load mais c'est tres long et au bout d'un certain temps ca plante.

    voici mon code:

    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
    function sendnews($sujet, $message){
    	   global $database;
     
          $from = "From: ".EMAIL_FROM_NAME." <".EMAIL_FROM_ADDR.">";
          $subject = stripslashes($sujet)." !";
          $body = stripslashes($message);
     
    $q = "SELECT * "
           ."FROM ".TBL_USERS." ORDER BY email ASC";
       $result = $database->query($q);
     
       $num_rows = mysql_numrows($result);
       if(!$result || ($num_rows < 0)){
          echo "Error displaying info";
          return;
       }
       if($num_rows == 0){
          echo "Database table empty";
          return;
       }
       /* Display table contents */
     
       for($i=0; $i<$num_rows; $i++){
          $email  = mysql_result($result,$i,"email");
      	  //echo "$email\n<br>";
    	  //@mail($email, $title, $message);
    	    @mail($email,$subject,$body,$from);
       }
     
     
     
          return; 
       }
    Quelqu'un as une idée...

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Avec php.net/pcntl, mais il vaut mieux executer un tel script en CLI.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par is_null
    Avec php.net/pcntl, mais il vaut mieux executer un tel script en CLI.
    Je ne comprend pas ta réponse is_null, je part comment je sais pas trop la différence entre pcntl et cli tu veux dire quoi par la?

    explique!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Si le temps d'execution de ton script dépasse un certain temps, alors celui-ci est arreté. Il suffit d'augmenter le temps max dans ton php.ini :
    max_execution_time = 300 par exemple pour autorisé un délai de 300 secondes.

    Bien évidement ceci constitue une seule partie de la réponse que tu attends. Il peut être judicieux d'envoyer simultanément plusieurs mails. Mais là, je n'ai pas les connaissances.

    Bye

    Sylvain

  5. #5
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    C'est une tres mauvaise idee d'augmenter le max_execution_time global.

    Vous pouvez lui donner une valeur enorme tranquillement a un dossier grace a un fichier d'Override apache par example (souvent .htaccess), example :
    php_flag max_execution_time 3000
    php_flag memory_limit 256M

    N'oubliez pas que d'attribuer de telles valeurs globallement est une mauvaise idee, c'est a placer pour des dossiers contenant des scripts de maintenance etc ...
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 11
    Points : 5
    Points
    5
    Par défaut
    Bon je comprend un peu mieux, mais je n'ai pas access au fichier php.ini je crois, c'est surement seulement mon hébergeur qui peux le faire.

    Alors la solution n'est pas la bonne dans ce cas.

    alors avez vous d'autre suggestions.

    Merci

    je sais pas si au lieux 'envoyer' un mail à chacun des user je ne pourrais pas les mettres dans une liste de distribution à la place.

    Es-ce qu'on peux envoyer des mails avec distribution llist.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Ou plus simple, utiliser la fonction set_time_limit qui définit le temps maximum d'execution uniquement pour le script en cours. Cela permet un réglage plus fin.

    void set_time_limit ( int seconds )

    set_time_limit fixe le délai d'expiration d'un script, en secondes. Si cette limite est atteinte, le script s'interrompt, et renvoie une erreur fatale. La valeur par défaut est 30 secondes ou, si c'est le cas, la valeur de la directive max_execution_time définie dans le php.ini . Si la valeur est zéro, il n'y a alors aucune limite imposée.

    Lorsqu'elle est appelée, set_time_limit remet le compteur à zéro. En d'autres termes, si la limite par défaut est à 30 secondes, et qu'après 25 secondes d'exécution du script l'appel set_time_limit(20) est fait, alors le script tournera pendant un total de 45 secondes avant de finir.
    [...]

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Points : 10
    Points
    10
    Par défaut
    Teste la fonction set_time_limit(), on ne sait jamais, peut etre que ton hebergement ne l'a pas bloquée. Si ça marche, tu place cet appel dans ta boucle for. Genre un set_time_limit(10). Comme ça chaque envoi de mail dispose de 10 sec pour etre envoyé.

    Seeya

Discussions similaires

  1. [Mail] Envoyer e-mail d'activation
    Par H-bil dans le forum Langage
    Réponses: 14
    Dernier message: 11/05/2007, 10h05
  2. [Mail] Envoyer un mail avec retour d'erreur
    Par phpaide dans le forum Langage
    Réponses: 1
    Dernier message: 19/04/2006, 15h49
  3. [Mail] Envoyer un mail
    Par Poutchou dans le forum Langage
    Réponses: 2
    Dernier message: 15/03/2006, 12h19
  4. [Mail] Envoyer des mails simplement avec PHP
    Par mailou dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2006, 17h21
  5. [Mail] envoyer un mail qui n'est pas anonyme
    Par mzt.insat dans le forum Langage
    Réponses: 21
    Dernier message: 10/12/2005, 09h16

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