taille d'un fichier texte

Eléphanteau du PHP | 21 Messages

28 nov. 2006, 17:14

Bonjour,

j'ai un script d'envoi de newsletter qui ajoute les adresses email dans un fichier texte à la suite l'une de l'autre et un séparateur | (donc... tout sur la même ligne)

Le problème c'est que j'ai 1200 inscrits et que mon script n'affiche que 148 inscriptions.

Y a-t-il une limite au nombre de caractères sur une même ligne ?

J'ai essayé d'éditer ce fichier en ajoutant quelques retours à la ligne et ça ne fonctionne pas mieux... le script ne lit que jusqu'à la fin de la première ligne.

ma ligne de code pour l'inscription est la suivante:
$fp = fopen("membres.lst","a");fputs($fp,"$email|");fclose($fp);
et l'affichage des inscrits contient ce bout de code
$fp = fopen("../result.lst","r");
while (!feof($fp))
{
    $ligne = fgets($fp,4096);
    $email = explode("|",$ligne);
}
fclose($fp);
Est-ce que je peux changer la limite 4096 qui est indiquée là ?

Merci de m'éclairer
Émilie

Mammouth du PHP | 592 Messages

28 nov. 2006, 17:22

salut oui tu dois changer cette variable
car elle ne prend que les 4096 premiers caractères
voila comment récupérer la taille de ton fichier et ensuite le lire:

Code : Tout sélectionner

// Contient la taille du fichiet en octet $taille_fichier=filesize($Fnm); // Contient le contenu intégral du fichier $contenu=fread($inF,$taille_fichier);

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

28 nov. 2006, 17:28

Il y a mieux, puisque dans ton fichier les emails sont séparés par le caractère | tu peux lire tout son contenu en un lot et le convertir en tableau en reposant sur le séparateur |.
Voici comment :
//lire en un seul lot tout le fichier
$contenu_fichier = file_get_contents ("fichier_emails.txt");

//convertir le texte lu en tableau
$tab_emails = explode("|", $contenu_fichier);

//visualiser le tableau
print_r($tab_emails);
NB. les emails sont bien sûr enregistrés sur la même ligne et il n'y a pas de soucis ni de limite de taille (la seule limite étant la capacité de ton disque ou de ton quota de disque)
Modifié en dernier par sadeq le 28 nov. 2006, 17:32, modifié 1 fois.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Mammouth du PHP | 592 Messages

28 nov. 2006, 17:32

je suis confus :?
en fait je dois avoir les yeux qui fatiguent :shock:

--> fgets j'avais cru voir -->fread

SORRY [-o<

Eléphanteau du PHP | 21 Messages

28 nov. 2006, 17:50

Merci de votre réponse rapide...

Je vais essayer (j'suis pas bin bonne ... et faut pas que je change les noms des variables et j'ai d'autres bout à corriger... )

en attendant est-ce que je peux au moins changer ce nombre 4096 pour un plus gros ? pas mal plus gros mettons ?

J'ai testé en local avec le nombre 400096 et j'ai toutes mes adresses email. Mais sur le serveur je continue d'afficher seulement 147 inscriptions. ?!?!?!

Merci encore d'aider les débutants... vous êtes tous super ! Je vous reviens avec les résultats de mes tests.
Émilie

Mammouth du PHP | 684 Messages

28 nov. 2006, 18:17

Peut etre est tu limiter par le temps de traitement de ton script.
Il faut pas mal de temps a php pour faire l'envois des emails.
D'ou une limitation de tes 147 mails.

EDIT: J'avais pas bien compris. C'est un fichier de log que tu veux traiter et non l'envois. Mea culpa.
Zigz4g

Eléphanteau du PHP | 21 Messages

28 nov. 2006, 18:30

oui mais ce n'est pas lors de l'envoi des emails que je bloque sur le serveur... c'est seulement pour l'affichage des emails.

J'ai commencé à corriger mon script... et voici ce que j'ai maintenant (les lignes commentées sont les anciennes lignes de code)

if ($passlist == $variable[0])
{
//on lit le fichier ../result.lst
//$fp = fopen("../result.lst","r");
//while (!feof($fp))
    //{
    //$ligne = fgets($fp,400096);
    //$email = explode("|",$ligne);
    //}
//fclose($fp);

// début de la modification
$contenu_fichier = file_get_contents ("../result.lst");
$email = explode("|", $contenu_fichier); //convertir le texte lu en tableau
// fin de cette modification
$cpt=0;
for($x=0;$x < sizeof($email)-1;$x++)
{
$resultat = "checkbox$x";
if($$resultat){}else{$email2[$cpt] =  $email[$x];$cpt++;}
}

$fp = fopen("../result.lst","w+");
for($x=0;$x <= sizeof($email2)-1;$x++)
{fputs($fp,"$email2[$x]");fputs($fp,"|");}
fclose($fp);
}
if ($passlist != $variable[0] && strlen($passlist) >=1)
{echo("<div align='center'><font size='5' color='#FF0000'>Mot de passe incorect</font></div>");}


//Interface Voir et effacer liste de diffusion
if (($menu == "Voir Effacer Inscriptions") or (strlen($passlist)>=1))
{
//on lit le fichier ../result.lst
//$fp = fopen("../result.lst","r");
//while (!feof($fp))
    //{
    //$ligne = fgets($fp,400096);
    //$email = explode("|",$ligne);
    //}
//fclose($fp);
// début de la modification
$contenu_fichier = file_get_contents ("../result.lst");
$email = explode("|", $contenu_fichier); //convertir le texte lu en tableau
// fin de cette modification
if(sizeof($email) >1){echo("<h3 align='center'>Cocher les adresses &agrave; supprimer</h3><form method='post' action='index.php?menu_admin=admin'><p>&nbsp;</p><table width='40%' border='1' align='center'>");}else{echo("<p align='center'><font color='#AE0000'><b>Aucun inscrit dans la liste de diffusion   ! </b></font></p>");}
for($x=0;$x < sizeof($email)-1;$x++){$y = $x+1;echo("<tr><td width='5%' bgcolor='#0099CC'><input type='checkbox' name='checkbox$x'></td><td width='10%' bgcolor='#999999'><div align='center'><font color='#000000'>$y</font></div></td><td width='95%' bgcolor='#CCCCCC'><a href='mailto:$email[$x]'>$email[$x]</a></td></tr>");}
if(sizeof($email) >1){echo("</table><div align='center'><p><b>Mot de passe : </b><br> <input type='password' name='passlist'><br> <br><input type='submit' name='submit' value='Supprimer'></div></form><p>&nbsp;</p>");}
}

//Interface ajout lettre distant
if($menu == "Envoyer une lettre") // distant
{
$cpt3 = 0;
$handle=opendir("newsletter");
while ($file2 = readdir($handle))
      {if (ereg(".html$",$file2)or ereg(".htm$",$file2) or ereg(".txt$",$file2))
          {$filelist[$cpt3]=$file2;$cpt3++;}
      }
echo("<div align='center'><p><font color='#AE0000'><b><font size='4'>ENVOYER UNE LETTRE D'INFO</font></b></font></p><form method='post' action='admin.php'><h4>NOTEZ: pas d'apostrophe dans le sujet</h4>Sujet : <input type='text' name='sujet'><p>Fichier :  (html, htm, txt)<br><br><select name='file'>");
for($x=0;$x < sizeof($filelist);$x++)
      {echo("<option>newsletter/$filelist[$x]</option>");}

echo("</select><br><br><input type='submit' name='submit' value='Apercu'></p></form><p>&nbsp;</p></div>");
}

//Interface Apercu avant envoi(resultat de la requete ajout lettre)
if(strlen($file)>=1 && strlen($sujet)>=1 && $pass2!=1)
{
$file = str_replace("\\","/",$file);
$file = str_replace("//","/",$file);
$fp = fopen("$file","r");
while (!feof($fp)){$page .= fgets($fp,6096);}
fclose($fp);
if(ereg(".txt$",$file)){$page = str_replace("\n","<br>",$page);}
echo("<div align='center'><font color='#AE0000'><b>APERCU AVANT ENVOI<br><br><b> SUJET : $sujet</b><br></b></font><table width='75%' border='1'><tr><td>$page</td></tr></table>");
echo("<form method='post' action='admin.php?file=$file&&sujet=$sujet&&pass2=1'><p><b>Mot de passe : </b><br><input type='password' name='passsend'></p><p><input type='submit' name='submit' value='Envoyer'></p></form><p>&nbsp;</p></div>");
}
///  prévoir le cas où le sujet est vide pour informer l'administrateur

if(strlen($file)>=1 && strlen($sujet)<1 && $pass2!=1) {
echo("<div align='center'><font color='#AE0000'><b>APERCU AVANT ENVOI IMPOSSIBLE<br><br><b> IL MANQUE LE SUJET</b><br></b></font>");
}
//resultat de la requête apercu avant envoi
if($passsend)
{
if ($passsend != $variable[0]){echo("<div align='center'><p><font size='5' color='#FF0000'>Mot de passe incorrect</font></p></div>");$pass2=0;} 
if ($passsend == $variable[0])
{
//$fp = fopen("../result.lst","r");
//while (!feof($fp))
//      {$ligne = fgets($fp,400096);
//      $email = explode("|",$ligne);}
//fclose($fp);

// début de la modification
$contenu_fichier = file_get_contents ("../result.lst");
$email = explode("|", $contenu_fichier); //convertir le texte lu en tableau
// fin de cette modification

$fp = fopen("$file","r");
while (!feof($fp)){$page .= fgets($fp,6096);}
fclose($fp);
if(ereg(".txt$",$file)){$page = str_replace("\n","<br>",$page);}
$cptmail = 0;
$entetemail =  'MIME-Version: 1.0' . "\r\n";
$entetemail .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$entetemail .= 'From: Client <[email protected]>' . "\r\n";

for($x=0;$x <= sizeof($email)-2;$x++){$adressed = "<a href='$variable[1]?id=$email[$x]'>$variable[1]?id=$email[$x]</a>";$code = "<hr><div align='left'><p><font color='#FF0000'>Pour vous d&eacute;sabonner de notre newsletter,   cliquez sur le lien ci dessous :</font><br>";$courrier = $email[$x];mail("$courrier","$sujet","$page$code$adressed",$entetemail);$cptmail++;}
}
}


//resultat de la requete envoyer la lettre
// etc...

et ça ne marche toujours pas sur le serveur... j'affiche seulement 147 emails alors qu'en local je les vois tous (on ne parle que d'affichage... j'ai pas testé l'envoi)

Encore merci !
Émilie

Eléphanteau du PHP | 21 Messages

28 nov. 2006, 20:27

Désolée du dérangement... j'avais mis à jour le fichier texte qui contenait un retour de chariot et ça faisait tout foirer.

J'ai remis à jour le fichier texte et ça marche.

Encore désolée pour le dérangement.

Bonne fin de soirée.
Émilie