mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009
-
29 oct. 2005 à 11:05
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 2007
-
30 oct. 2005 à 23:59
bonjour,
j'ai réalisé un envois d'une newsletter mais je souhaite envoyer les emails par flot de x adresse mail.
Actuellement j'envois tout en une fois pour l'instant cela fonctionne mais en prévision d'avenir il serait idéale d'utilisé l'envoi par flot pour évité le timout php de 30 sec.
Les emails sont dans une base mysql.
Comment puis-je réaliser cela?quelqu'un aurait-il une idée?
merci d'avance pour votre aide
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 30 oct. 2005 à 22:24
bonsoir,
merci à tous pour votre aide
j'ai commencer un script (toujours en version bêta) mais cela fonctionne le principe est là.
le principe est comme l'affichage de données issue d'une base sur plusieurs pages
voici mon code (brut) si quelqu'un est interesser
<?php
$host = "localhost"; // Host de la base de données
$user = "root"; // Login
$pass = ""; // Mot de passe
$bdd = "journee"; // Nom de la base de données
@mysql_connect($host,$user,$pass) or die("Impossible de se connecter à la base de données");
@mysql_select_db("$bdd") or die("Impossible de se connecter à la base de données");
$currentPage = $_SERVER["PHP_SELF"];
//limit maximum
$limit = 30;//nombre d'email par flot
$pageNum = 0;//init du nombre de page
if (isset($_GET['pageNum'])) {
$pageNum = $_GET['pageNum'];//recupération nombre de page par lien
}
//limit minimum
$debut = $pageNum * $limit;
//requête SQL:
$query = "SELECT email_newsletter FROM newsletter ";
$query_limit = "SELECT email_newsletter FROM newsletter LIMIT $debut,$limit" ;
//exécution de la requête:
$requete = mysql_query($query_limit);
$result = mysql_fetch_assoc($requete);
if (isset($_GET['totalRows'])) {
$totalRows = $_GET['totalRows'];
} else {
//exécution de la requête sur tout email
$all = mysql_query($query);
//nombre total email
$totalRows = mysql_num_rows($all);
}
//arrondi du nombre total d'email par le nombre d'email par envois qui donne le nombre de pages total
$totalPages = ceil($totalRows/$limit)-1;
//gestion variable passer par le lien
$queryString = "";
if (!empty($_SERVER['QUERY_STRING'])) {
//Scinde la chaîne de caractères/variable grace au delimiteur &
$params = explode("&", $_SERVER['QUERY_STRING']);
//creation d'un tableau de paramètre du lien
$newParams = array();
foreach ($params as $param) {
if (stristr($param, "pageNum") == false &&
stristr($param, "totalRows") == false) {
//ajoute un nouveau paramètre au tableau
array_push($newParams, $param);
}
}
if (count($newParams) != 0) {
$queryString = "&" . htmlentities(implode("&", $newParams));
}
}
$queryString = sprintf("&totalRows=%d%s", $totalRows, $queryString);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>envois par flot ok</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<?php if ($pageNum < $totalPages) {//if?>
<?php //min() retourne la plus petite valeur numérique parmi les valeurs passées en paramètres. ?>
">Envoyer aux 30 membres Suivant
<?php }//if ?>
</html>
<?php
mysql_free_result($requete);
?>
à créer une table newsletter avec id et email_newsletter en varchar(80) par exemple
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 29 oct. 2005 à 12:52
bonjour,
oui en effet je connais cette fonction mais les hébergeurs ne bloque t il pas par défaut le timeout à 30 sec (chez ovh par exemple)
De ce faite est ce que cette fonction fonctionne t elle?
J_G
Messages postés1406Date d'inscriptionmercredi 17 août 2005StatutMembreDernière intervention28 août 200710 29 oct. 2005 à 13:12
Certainemen pas, tu as raison... Pour preuve, cette citation du site fr.php.net :
<hr size= "2" width="100%"> Avertissement
Notez que set_time_limit() n'a pas d'effet lorsque PHP
fonctionne en mode safe mode. Il n'y a pas d'autre solution que de changer de
mode, ou de modifier la durée maximale d'exécution dans le <tt>php.ini</tt>.
<hr size ="2" width="100%">J'imagine que OVH fonctionne en safe_mode :(
Vérifie-le via phpinfo()
Sinon, tu vas être aobligé d'appeler ton script plusieurs fois, une
fois pour chaque paquet d'envoi... Tu le fait comme tu veux : AJAX,
affichage d'une popup, appelant le script d'envoi de paquet de
newsletter dont la réponse est une redirection vers l'envoi du prochain
paquet... Bref de la bidouille !
Il n'y a guère d'autres solutions.
C'est d'ailleur un gros manque de PHP ça... l'impossibilité de créer
des processus enfants !!! (Ou alors je n'ai pas trouvé le moyen de).
Car avec les processus enfant, tu aurais pu lancer un script par paquet
en arriere plan, puis attendre (ou non) leur fin pour afficher ta
réponse "newsletter envoyées".
POURQUOI IL N'Y A PAS DE FONCTION fork EN PHP ???
désolé, je ne vois pas de "bonne" solution à ton problème.
Bonne chance...
Vous n’avez pas trouvé la réponse que vous recherchez ?
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 29 oct. 2005 à 13:35
rebonjour,
merci pour ton aide je vais essayer de faire un script pour envoyer par paquet/flot ç la meilleur solution.
Mais si quelqu'un a déjà trouver une solution ou un script utilisant l'envois par flot je suis preneur?
cs_Anthomicro
Messages postés9433Date d'inscriptionmardi 9 octobre 2001StatutMembreDernière intervention13 avril 20078 29 oct. 2005 à 18:17
Salut,
perso j'utilise un vieux truc mais qui fonctionne très bien :
vu que mes membres ont un id unique, je compte le nombre de membres
étant abonnés à la newsletter, j'envoie mettons par paquets de 100
mails. J'indique dans un formulaire en method post l'id actuel de début
et l'id actuel de fin, je fous un javascript qui refresh la page
automatiquement et en fonction de l'id de fin je prends les 100 id
suivants.
D'ailleurs, si ta connection plante, il te suffit d'améliorer mon
concept de base pour pouvoir le faire repondre à peu près la ou il en
était. (genre, tu log dans un fichier où tu en est... ).