Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Verständnisfrage und Mailversand in einer Schleife begrenzt

Diskussion: Verständnisfrage und Mailversand in einer Schleife begrenzt im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Erstmal zeige ich euch lieber meine Dateien: Dateien: mail.txt- 12x ist meine E-Mail eingetragen Code: overflow@nomail.com overflow@nomail.com overflow@nomail.com overflow@nomail.com ...

Antwort
Alt 25.01.11, 13:51   #1 (permalink)
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard Verständnisfrage und Mailversand in einer Schleife begrenzt

Anzeige

Erstmal zeige ich euch lieber meine Dateien:

Dateien:
mail.txt- 12x ist meine E-Mail eingetragen

Code:
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
overflow@nomail.com
mail.php - mail.txt wird geöffnet und die E-Mail-Adresse übernommen mit einem Warteintervall von 10 Sekunden zwischen jedem Sendevorgang
PHP-Code:
<?php

$datei 
fopen("mail.txt","r");

$sender "overflow@nomail.com";
$betreff "Test";

$mailtext "Hallo,\n";
$mailtext.="Habo"

while(!feof($datei))
   {
   
$empfaenger fgets($datei,60);
   
mail($empfaenger$betreff$mailtext"From: $sender");
   
sleep10 );
}

fclose($datei);

?>

Fragen - Thema 1:

Wenn ich die mail.php ausführe, ist der Browser ständig am arbeiten/warten bis der Prozess komplett fertig ist. Jedoch bricht er den Vorgang bei etwa 6-7 E-Mails ab.
- Wieso ist das so?
- Ist es ein Schutz von meinem Webhoster (Strato)?

Fragen - Thema 2:
Gibt es eine elegantere Möglichkeit in PHP?
Habe an eine Variante in Kombination mit Ajax gedacht, nach jedem Erfolgreichen Versand, wird es auf dem Browser angezeigt.
overflow ist offline   Mit Zitat antworten
Alt 25.01.11, 13:59   #2 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 443
Standard

Zu Frage 1: PHP hat einen Konfigurationswert, der sich max_execution_time nennt. Nach erreichen des dort konfigurierten Werts (üblicherweise ca. 10-30s) wird ein Skript abgebrochen. Für Massenmailer ist PHP daher nur bedingt geeignet und es muss mit entsprechenden Threads gearbeitet werden, die jedes Mal beendet werden, wenn eine Email versendet wurde.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist gerade online   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 25.01.11, 14:54   #3 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard

Die Forumsoftware hier sowie andere bieten über die Administrationsfläche die Möglichkeit "An alle Mitglieder" eine E-Mails zu senden.

Arbeiten diese auch mit Threads ?
Ich erinnere mich nämlich an ein Programm, welches angezeigt hat ob die Mail raus ist ala:" Mail 1 ist raus, Mail 2 ist raus usw."
overflow ist offline   Mit Zitat antworten
Alt 25.01.11, 14:58   #4 (permalink)
Member of Honour
 
Benutzerbild von beavisbee
 
Registriert seit: 22.02.07
beavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium IIIbeavisbee Leistung: Pentium III
beavisbee eine Nachricht über ICQ schicken
Likes: 77
Standard

http://php.net/manual/de/function.set-time-limit.php

mit
PHP-Code:
<?php
set_time_limit
(0);
?>
wird das Timeout abgeschalten. Ausnahme natürlich, die Funktion ist vom Hoster geblockt oder es gibt außer dieser Beschränkung weitere Zeit-Beschränkungen z.B. wenn PHP via Apache-Modul mod_fcgid + suEXEC eingebunden ist (da gibt es z.B. eine Option IPCCommTimeout, welche sich nicht script-seitig manipulieren lässt)
beavisbee ist gerade online   Mit Zitat antworten
Alt 25.01.11, 15:36   #5 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard

@beavisbee: Nette Funktion, leider nicht möglich bei Strato-Servern.

Zum Thema "Threads in PHP" spucken die Suchmaschinen leider nichts informatives aus.
Konnte keine Einführungen auf Deutsch finden.
Auch in meinen PHP Büchern steht nichts drin.
overflow ist offline   Mit Zitat antworten
Alt 25.01.11, 15:45   #6 (permalink)
 
Registriert seit: 06.06.09
Thunderb0lt Leistung: 8086
Likes: 6
Standard

Lies dir doch einfach den aktuellen wert von max_execution_time aus, schick dann ein paar Mails raus, lade die Seite neu und schick die nächsten Mails raus. Das machst du solange, bis alle Mails raus sind.
Die "Ausgabe im Browser" kannst du mit ob_flush() erzwingen.
__________________
A good programmer looks both ways before crossing a one-way street.

Die Politik kann uns nur für so dumm verkaufen, wie wir sind.
Thunderb0lt ist offline   Mit Zitat antworten
Alt 25.01.11, 21:59   #7 (permalink)
 
Benutzerbild von she3p
 
Registriert seit: 07.05.07
she3p Leistung: 8086
Likes: 19
Standard

Zitat:
Zitat von overflow Beitrag anzeigen
Zum Thema "Threads in PHP" spucken die Suchmaschinen leider nichts informatives aus.
Konnte keine Einführungen auf Deutsch finden.
Deutsch nicht, allerdings: http://blog.motane.lu/2009/01/02/multithreading-in-php/

Zitat:
you don’t extend the Thread class, you simply provide the name of a callback function in the constructor.
Habs persönlich nicht ausprobiert, es dürfte allerdings funktionieren.. Da deine Threads
soweit ich dein Problem verstehe nicht konkurierend sind, dürfte ein einfaches Aufrufen von child processes bereits reichen.

http://ch.php.net/manual/en/function.pcntl-fork.php

Da les ich gerade..:

Zitat:
Process Control support in PHP is not enabled by default. You have to compile the CGI or CLI version of PHP with --enable-pcntl configuration option when compiling PHP to enable Process Control support.
Folglich musst du Glück haben. Einfach mal testen.
.. Hmm und dann noch:

Zitat:
Process Control should not be enabled within a web server environment and unexpected results may happen if any Process Control functions are used within a web server environment.
Das heisst wohl: Bad Luck.

JFYI
she3p ist offline   Mit Zitat antworten
Alt 25.01.11, 22:11   #8 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard

Thunderb0lt war so lieb mir zu helfen und ein geniales Skript zu erstellen.
Dieses möchte ich mit seiner Einverständnis hier veröffentlichen.
Viel brauchen wir dazu nicht sagen.

PHP-Code:
 <?php

$start 
time();

$max_exec ini_get('max_execution_time');

// Reads entire file into an array
$lines file("mail.txt");

$offset 0;

$sender "overflow@nomail.com";
$betreff "Test";

$mailtext "Hallo,\n";
$mailtext .= "Habo";

if(isset(
$_GET['offset']) && intval($_GET['offset']) > 0)
{
    
$offset intval($_GET['offset']);
}

$lineCnt count($lines);
for(
$i=$offset$i<$lineCnt; ++$i)
{
    if( (
time() - $start) > ($max_exec-10) )
    {
        echo 
'<SCRIPT LANGUAGE="JavaScript">
              <!--
              location="' 
$_SERVER['PHP_SELF'] . '?offset=' $i '";
              //-->
              </SCRIPT>'
;

        exit();
    }

    
#mail($lines[$i], $betreff, $mailtext, "From: $sender");
    
echo $lines[$i];
    
sleep(5);
}

echo 
'All mails sent';

?>
overflow ist offline   Mit Zitat antworten
Alt 27.01.11, 17:38   #9 (permalink)
 
Benutzerbild von Firebird
 
Registriert seit: 11.04.06
Firebird Leistung: Facit NTK
Likes: 0
Standard

Hallo,

lies dir bitte folgendes zu der php mail() Funktion durch:
Zitat:
Note:

It is worth noting that the mail() function is not suitable for larger volumes of email in a loop. This function opens and closes an SMTP socket for each email, which is not very efficient.

For the sending of large amounts of email, see the » PEAR::Mail, and » PEAR::Mail_Queue packages.
Quelle (fast direkt über den Kommentaren)

lg
Firebird ist offline   Mit Zitat antworten
Alt 27.01.11, 20:15   #10 (permalink)
Themenstarter
 
Benutzerbild von overflow
 
Registriert seit: 17.01.04
overflow Leistung: Z3
overflow eine Nachricht über ICQ schicken overflow eine Nachricht über MSN schicken
Likes: 17
Standard

Ja, das war mir bekannt.
Kannte bisher keine andere Alternative.

Vielen Dank.
overflow ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » PHP Verständnisfrage und Mailversand in einer Schleife begrenzt
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61