SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Einführung in XHTML, CSS und Webdesign

Einführung in XHTML, CSS und Webdesign zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 13.11.2013, 16:02:52
Mario Sedlak Mario Sedlak ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 36
Beiträge: 2
Timeout bei Mailversand abfangen

Ich will mit PHP eine Mail verschicken. Wenn der Versand nicht in 10 Sekunden erfolgreich durchgeführt wurde, soll eine von mir definierte Fehlermeldung ausgegeben werden. Erstaunlicherweise habe ich für dieses Problem nirgendwo eine Lösung gefunden.

Ich benutze einen Webspace mit Safemode=Off. Ich habe keinen Vollzugriff auf den Server und kann nicht beeinflussen, ob die PHP-Funktion mail() terminiert oder aufgrund irgendwelcher Störungen aufseiten meines Anbieters nie beendet wird.

Folgende Möglichkeiten habe bereits erfolglos probiert:

1) Exception-Handling mit try und catch
2) set_time_limit(10);
3) ini_set('max_execution_time', 10);
4) mail($empfaenger, $betreff, $text, $kopf, '-O Timeout.aconnect=9s');

Keine davon ändert was daran, dass meine Webseite, die eine Mail verschicken sollte, im Fehlerfall erst nach 300 Sekunden den Benutzer über den Fehler informiert, und dann nur mit der Standard-Apache-Fehlermeldung:

Zitat:
The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, [no address given] and inform them of the time the error occurred, and anything you might have done that may have caused the error.
Kann man PHP nicht beibringen, dass es einer Funktion maximal 10 Sekunden zur Ausführung geben soll?

Ich finde es unprofessionell, einem Benutzer eine "hängende" Webseite zuzumuten.
Mit Zitat antworten
  #2  
Alt 16.11.2013, 17:26:39
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Timeout bei Mailversand abfangen

Zitat:
Zitat von Mario Sedlak Beitrag anzeigen
Ich will mit PHP eine Mail verschicken. Wenn der Versand nicht in 10 Sekunden erfolgreich durchgeführt wurde, soll eine von mir definierte Fehlermeldung ausgegeben werden. Erstaunlicherweise habe ich für dieses Problem nirgendwo eine Lösung gefunden.
Da gibts auch keine.
Alle Mails, die nicht über den zum Absender gehörigen SMTP Server verschickt werden, werden als SPAM betrachtet. Fast alle SMTP Server - zumindest die, die keine "open relays" sind - erwarten, daß sich der Mailabsender via SMTP-auth oder smtp-after-pop authentifiziert.
Zitat:
Ich benutze einen Webspace mit Safemode=Off. Ich habe keinen Vollzugriff auf den Server und kann nicht beeinflussen, ob die PHP-Funktion mail() terminiert oder aufgrund irgendwelcher Störungen aufseiten meines Anbieters nie beendet wird.
mail() - diese Funktion ist zum Versand korrekter Emails absolut ungeeignet. Nutze dafür entweder phpmailer oder swift mailer.

Auf meinem Server habe ich die Funktion mail() gesperrt. Postfix erwartet bei mir SMTP Auth auch von lokalen Scripten. Warum? Ganz einfach: ich hatte mal Pech gehabt, weil der Horde Webmailer zum SPAM Versand genutzt wurde und die Server IP nach 24 Std. gelistet war.
Zitat:
Folgende Möglichkeiten habe bereits erfolglos probiert:
1) Exception-Handling mit try und catch
Das ist bei mail() Unfug. Der Rückgabewert von mail() sagt nur das aus:
Zitat:
Returns TRUE if the mail was successfully accepted for delivery, FALSE otherwise.

It is important to note that just because the mail was accepted for delivery, it does NOT mean the mail will actually reach the intended destination.
Zitat:
2) set_time_limit(10);
3) ini_set('max_execution_time', 10);
Das klappt so nicht. Wenn apache2handler und max_execution_time per admin_php_value gesetzt wurde, wird ini_set u/o set_time_limit() ohne Fehlermeldung nicht ausgeführt. Bei fastCGI und einer zentralen php.ini ist das genauso. Es muß zumindest ausgeschlossen werden, daß irgend ein Untermieter die Zeitgrenze auf unendlich setzen kann.
Zitat:
4) mail($empfaenger, $betreff, $text, $kopf, '-O Timeout.aconnect=9s');
Nett gedacht:
Code:
              This feature is available in Postfix 2.3 and later.
       -O option=value (ignored)
Dein Option wird also ignoriert.
Zitat:
Kann man PHP nicht beibringen, dass es einer Funktion maximal 10 Sekunden zur Ausführung geben soll?
Programmiere lieber so, daß Dein Script innerhalb von max. 50ms fertig ist.
Zitat:
Ich finde es unprofessionell, einem Benutzer eine "hängende" Webseite zuzumuten.
Ich auch.

Nutze phpmailer. Dann muß Dein Script nicht warten, bis sendmail fertig oder ob das Postamt des Empfängers gerade geschlossen ist. Die Mailerklasse liefert Deine Email beim Absender SMTP ab, der dann versucht, innerhalb von 7 Tagen die Email beim Empfänger SMTP abzugeben. Falls das nicht klappt ("Empfänger unbekannt verzogen", "Briefkasten voll", "Pause, weil das Personal streikt", "Postamt gibts nicht"), gehts zurück an den Absender.
Mit Zitat antworten
  #3  
Alt 17.11.2013, 18:00:32
Mario Sedlak Mario Sedlak ist offline
Anfänger
 
Registriert seit: Nov 2013
Alter: 36
Beiträge: 2
AW: Timeout bei Mailversand abfangen

Danke für die Info, dass es in PHP für ein einfaches Problem keine einfache Lösung gibt.

Eine komplizierte Lösung gibt es schon: Den Mailversand auf eine eigene PHP-Seite auslagern, die ich serverseitig über curl aufrufe, wobei ich ein Timeout von 10 s setzen kann. Allerdings sind komplizierte Lösungen oftmals auch instabiler, und ich will eigentlich nur mir selbst eine Mail schicken und dem Benutzer bestätigen, dass ich seine Nachricht erhalten habe. Daher will ich keine Queue verwenden. Spam oder das "Postamt" entfernter Empfänger ist in meinem Fall kein Thema.

PHPMailer würde mich interessieren, wenn es Funktionen für ein Fehlermanagement in meinem Sinne (sofort senden versuchen, aber max. 10 s warten) hat. Falls jemand einen entsprechenden Beispielcode kennt, bitte um Info.
Mit Zitat antworten
  #4  
Alt 18.11.2013, 02:28:10
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Timeout bei Mailversand abfangen

Zitat:
Zitat von Mario Sedlak Beitrag anzeigen
Danke für die Info, dass es in PHP für ein einfaches Problem keine einfache Lösung gibt.
Mailversand ist nicht simpel.
Mit Zitat antworten
Antwort

Stichworte
fehlerbehandlung, mail-funktion, timeout


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
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 aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Timeout nicht für Admin Werner77 PHP Grundlagen 12 18.09.2011 17:11:39
Timeout mit fsockopen Friedhelm PHP Grundlagen 3 18.02.2010 18:51:42
Timeout Daniel Can Apache HTTP-Server 0 29.11.2008 02:10:41
Skript nach Timeout ordentlich beenden c4 PHP für Fortgeschrittene und Experten 14 03.05.2005 15:21:27
Timeout beim laden von Seiten abfangen LFeldTom PHP für Fortgeschrittene und Experten 7 31.10.2003 12:16:02


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:49:16 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt