Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Sospendere un cliclo WHILE per un certo numero di secondi.

    Ciao a tutti,
    tempo fa realizzai un semplice script che mi permetteva di inviare una newsletter ad alcuni indirizzi e-mail memorizzati in un DB mysql.
    Lo script funzionava con un semplice ciclo while mediante il quale ogni singolo indirizzo e-mail veniva prelevato dal DB e poi mediante la funzione mail veniva spedita la newsletter.

    Lo script, senza particolari pretese, funzionava bene ma non l'ho mai testato per un elevato numero di indirizzi.

    Avendo un pò di tempo libero, vorrei migliorarlo sotto alcuni aspetti ed in particolare vorrei utilizzarlo anche nel caso in cui gli indirizzi e-mail fossero in numero elevato (ad esempio 5000).
    A tal proposito la prima cosa a cui ho pensato è quella di suddividere l'invio della newsletter per pacchetti di 50 indirizzi e-mail.

    In pratica vorrei inviare le newsletter a 50 indirizzi alla volta, raggiunto il limite max di 50 vorrei interrompere il ciclo while e poi riprenderlo dopo 5 minuti (ad esempio) con le stesse modalità fino all'esaurimendo dei pacchetti.

    E' possibile una cosa del genere?

    Ho pensato anche ad una soluzione più semplice e manuale, ma mi piacerebbe capire (anche per curiosità) se è possibile fare una cosa del genere in automatico.

    Ciao a tutti e grazie

  2. #2

  3. #3
    sleep(x)
    sospende l'esecuzione per x secondi. Però dovrai modificare il timeout (che di solito è impostato a 30 secondi)

  4. #4
    Originariamente inviato da mtx_maurizio
    sleep(x)
    sospende l'esecuzione per x secondi. Però dovrai modificare il timeout (che di solito è impostato a 30 secondi)
    Ciao mi potresti spiegare un pò come funzione questa

    sleep(x)

    e inoltre il timeout cosa è?
    Se è quello che intendo io si dovrebbe modificare direttamente sul server, ma non avendo accesso ai suoi parametri di configurazione non credo di poterlo fare.

    Mi illumini per piacere?

  5. #5
    E' una funzione semplicissima
    http://ch2.php.net/manual/it/function.sleep.php

    il tempo massimo di esecuzione in effetti va impostato nel php.ini e non può essere modificato con la funzione ini_set

  6. #6
    se non puoi impostare il timeout dello script potresti pensare di dividere l'esecuzione in step richiamabili via GET (script.php?step=50, script.php?step=100, etc...)

    in base ad $_GET['step'] Limiti la query ad X email
    Codice PHP:
    $ciclo 50// Mail da inviare ad ogni ciclo
    $end = (int)$_GET['step'];
    $start $end $ciclo;

    mysql_query("...... LIMIT {$start}{$end}"); 
    Poi puoi gestire il redirect al prossimo step con JS
    Codice PHP:
    echo '
    <script type="text/javascript">
    <!--
    function Redirect() 
    {
       location.href = "script.php?step=' 
    . ($end $limit) . '";
    }
    window.setTimeout("Redirect()", 300000); //Fa partire il redirect dopo 5 minuti
    //-->
    </script>'

    Certo, devi lasciare il browser aperto finche hai finito, però credo possa funzionare

  7. #7
    Stavo pensando anche di fare una cosa del genere e di suddividere l'invio così come hai postato.

    Credo proprio che sceglierò questa opzione!

    A tal proposito secondo voi per non caricare troppo il server e per assicurarsi (di sicuro c'è poco in quiesto mondo ) un corretto invio quante newsletter bisogna mandare in ogni pacchetto e quanto tempo attendere tra l'invio di ogni pacchetto?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.