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

PHP & Base de données Discussion :

Gestion d'un fichier txt


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut Gestion d'un fichier txt
    bonjour à tous

    je suis coincé sur un problème de fichier temporaire.txt
    But du script:
    1-recevoir une liste d’émail par POST_
    2-créer un dossier temporaire
    3-Lire un paquet de 50 mails
    4-envoyer les 50 mails
    5-effacer les 50 mails envoyés de la liste
    6-prendre les 50 suivants
    7- dito jusqu’à épuisement du stock

    je reçois une liste d’émail déjà formaté avec les virgules (sauf le dernier)
    des listes de tri (cf simulation début du code)
    je crée le fichier temporaire et je charge ma liste d'émail

    après je ne sais plus comment faire pour en lire 50 les envoyer et les supprimer de la liste

    merci de me consacrer qq minutes car les mailing de nos adhérents arrivent en spam

    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
    34
    35
    36
    37
    38
    <?php
    $_POST[email_bcc]='email1@free.fr,email2@free.fr,email3@free.fr'; //simulation des emails recus par POST_
     
    //**************************CONSTANTES de Configuration************************
     
    $paquet=50;// envoi par paquet de 50 emails
    $PAUSE=5;// Pause de 5 s entre chaque envoi
     
    //*********************Connexion à la base de données****************************
     
    include('../_admin/_connect.php');
     
    //*********************Fichier Tempraire**************************************
    unlink("temporaire.php"); // initialise le fichier pour réécrire
     
    $temporaire = fopen("temporaire.php","w"); // ouverture du fichier en écriture
     
    fputs($temporaire,$_POST[email_bcc]); //ecriture de la liste des emails dans le fichier temporaire
     
    //******************Mise du Fichier dans un tableau*****************************
    $Fichier = "temporaire.php";
     
    if (is_file($Fichier))
     {
    	if ($TabFich = file($Fichier))
    	 {
    		for($i = 0; $i < count($TabFich); $i++)
    			echo $TabFich[$i];
    	}
    	else
    	{
    		echo "Le fichier ne peut être lu...<br>";
    	}
    }
    	else
    	{
    	echo "Désolé le fichier n'est pas valide<br>";
    	}

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Pour faire plus simple j'enregistrerai les mail dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $tab_mail = explode(",",$_POST['email_bcc']);
    que tu sérialise pour l'enregistrer dans un fichier texte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    file_put_contents('temporaire.txt',serialize($tab_mail));
    Ensuite tu peux récupérer le tableau du fichier texte en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $tab_mail = unserialize(file_get_contents('temporaire.txt'));
     
    //L'avantage de cette manip c'est que tu peux maintenant utiliser les fonctions sur les tableaux :
     
    $premier_cinquante = array_splice($tab_mail, 0,50);
     
    $reste_a_envoyer = $tab_mail;

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Merci de ta réponse, c'est sympa

    cela me semble parfait
    je me penche dessus, et je reviens vers toi

    vu le nombre de neurone restant à 65 ans il me faut du temps pour que çà fasse le tour.

    Bonne soirée et encore merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Ah oui au fait je t'ai donné le principe pour le fichier texte mais tu ne pourras faire de pause à l'intérieur même de ton script. Il faudra utiliser une tâche programmée par le serveur (cron) pour lancer ton script toutes les 2 minutes par exemple.

    Cela te fait donc deux scripts distincts.

    Le premier pour récupérer les mail et les envoyer dans le fichiers texte (correspondant aux deux première lignes de mon code plus haut).

    Et le second script qui sera exécuter par le cron de manière automatique. En développant un peu mon dernier bloc de code cela pourrait donner quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $tab_mail = @unserialize(file_get_contents('temporaire.txt'));
     
    if(is_array($tab_mail) && count ($tab_mail) > 0)
    {
        $paquet_envoi = array_splice($tab_mail, 0,50);
     
        foreach($paquet_envoi as $value)
        {
            mail($value , $autres_parametres...);
        }
     
        file_put_contents('temporaire.txt',serialize($tab_mail));
    }

  5. #5
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Bonjour,
    j’espère que ce n'est pas moi qui a perturbé ton sommeil (5h)

    le fichier est crée, mais les e mails ne sont pas enregistrés , à la place , j'ai i:0; dans le fichier

    Foreach remet l'index à 51 + 50 nouveau au deuxième tour et jusqu’à plus soif ???

    je te joins les lignes que j'ai passées

    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
    //*********************Creation Fichier Temporaire**************************************
     
    $tab_mail='email1@free.fr,email2@free.fr,email3@free.fr'; //simulation des emails recus par POST_
     
     
    unlink("temporaire.txt"); // initialise le fichier pour réécrire
     
    $tab_mail = fopen("temporaire.txt","w"); // ouverture du fichier en écriture
     
    file_put_contents('temporaire.txt',serialize($tab_mail)); //Ouvre,Ecrit,ferme le fichier TXT en tableau la chaine $tab_mail
     
     
    $tab_mail = fopen("temporaire.txt","r"); // ouverture du fichier en lecture
    $tab_mail = @unserialize(file_get_contents('temporaire.txt'));// recuperation et lecture du fichier txt
     
    if(is_array($tab_mail) && count ($tab_mail) > 0)
    {
    	$paquet_envoi = array_splice($tab_mail, 0,50);
     
    	foreach($paquet_envoi as $value) // boucle qui envoie les paquets de 50
    	{
    		echo'$value';
    			echo'c\'est fait';  // à la place de la fonction mail pour l'instant
    	}
     }

  6. #6
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    re

    j'ai supprimé l'ouverture en ecriture du fichier

    donc je crée bien le fichier tx avec dedans :

    s:44:"email1@free.fr,email2@free.fr,email3@free.fr";

    je ne sais d'ou vient le s44:

    si tu passes par là pour éclairer ma lanterne

    à+

  7. #7
    Membre chevronné Avatar de LeGilou
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 488
    Par défaut
    Bonjour Claude,

    Je n'ai pas encore pris le temps de regarder le code proposé, mais je souhaite juste te faire remarquer une chose importante concernant l'envoi de mailing.

    1/ Si tes clients reçoivent les mails en tant que spam (ou courrier indésirable dans Outlook), ça ne vient pas du nombre de destinataires. Les destinataires CCi (je suppose que c'est ton cas) sont supprimés du mail à l'envoi. Le client de messagerie ne connait même pas le nombre de destinataires.
    Donc ça vient du contenu. Le client de messagerie analyse la structure du mail et détermine si c'est du spam ou pas. Il faut leur dire de mettre ton adresse dans leurs contacts (ou liste blanche) pour éviter ca.

    2/ Par contre, si le problème est que ton adresse IP est blacklistées, saches que les systèmes de black-listage sont très malins. Envoyer des paquets de 50 ne va pas résoudre ton problème. Il faut paser par des société dont c'est le métier, connues par les systèmes de blacklistage.

    Voilà.
    A bientôt.

    Gillou.

  8. #8
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    merci d'avoir pris le temps de m'informer

    pourtant il n'y a rien de publicitaire dans nos mailings
    ils concernent uniquement des adhérents à qui nous envoyons la lettre du mois en pdf ou des informations d généalogie.

    quand j'envoie par paquet de 200 300 çà passe si j'envoie la totalité 900 env j'ai des problèmes.
    en fait, je voudrais automatiser de que je fais à la main

    Pourtant presque tout les script de mailing ,espaces membres, ........ ont une fonction d'envoi par paquet

    Merci encore de ton message

  9. #9
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    - Si tu veux afficher le contenu d'un tableau (sans faire de boucle pour l'afficher) il faut utiliser ... ou encore var_dump($paquet_envoi) et non pas "echo" .

    - Si tu rentre dans le esle c'est que ta première condition est fausse, c'est à dire que : if(is_array($tab_mail) && count ($tab_mail) > 0) est faux.
    Mais à propos je ne vois plus dans ton code la première ligne qui récupère le tableau ?

    EDIT : le code que je t'ai donné en exemple est épuré, réduit au strict minimum. Tu peux éventuellement le compléter (ajouter du code) suivant tes besoins, mais tu ne peux pas supprimer une ligne du code initial (sinon pour la remplacer par un code équivalent) puisqu'elles toutes sont indispensables.

  10. #10
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 168
    Par défaut
    Bonjour,

    je n'ai pas remis la phase 1 de récupération puisqu’elle fonctionne

    je récupère le fichier temporaire.txt avec:

    s:8639:"jeanluc.@..................et la suite des emails en ligne

    seule la phase 2 ne fonctionne pas

    effectivement, comme le else est mis en évidence c'est que le if ne fonctionne pas, mais pour quoi ?????
    puisqu'on récupère bien la liste d’émail en lecture de la phase 1

    bonne soirée

  11. #11
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    fichier_1.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    $_POST['email_bcc'] = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z';
     
    if (isset($_POST['email_bcc']))
    {
    	$tab_mail = explode(",",$_POST['email_bcc']);
     
    	file_put_contents('temporaire.txt',serialize($tab_mail));
    }
    ?>
    fichier_2.php :
    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
    <?php
    $tab_mail = @unserialize(file_get_contents('temporaire.txt'));
     
    if(is_array($tab_mail) && count ($tab_mail) > 0)
    {
        $paquet_envoi = array_splice($tab_mail, 0,5);
     
        foreach($paquet_envoi as $value)
        {
            echo $value.'<br>';
        }
     
        file_put_contents('temporaire.txt',serialize($tab_mail));
    }
    ?>
    Tu recopies tel quel (sans rien changer) dans deux fichiers distincts.
    Tu lances fichier_1.php (une fois) et ensuite fichier_2.php plusieurs fois de suite. Les lettres vont s'afficher cinq par cinq (puisque j'ai défini le troisième paramètre de array_splice à 5). Chez moi ça fonctionne correctement jusqu'à épuisement de l'alphabet (contenu dans $_POST['email_bcc']).

Discussions similaires

  1. gestion d'un fichier txt
    Par b0ub0u dans le forum VB.NET
    Réponses: 5
    Dernier message: 05/05/2012, 16h22
  2. Réponses: 20
    Dernier message: 17/07/2009, 10h17
  3. Problème Gestion Liste et fichiers txt
    Par Freud44 dans le forum Général Java
    Réponses: 2
    Dernier message: 26/08/2008, 21h10
  4. Gestion de fichiers.txt en Transact-SQL
    Par ShaGaTsoin dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 16/09/2007, 21h29
  5. Traitement fichier .txt (gestion des '','')
    Par clemasson dans le forum Access
    Réponses: 1
    Dernier message: 11/12/2006, 15h26

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