PHP 7 und Mail::send() führt zu 502 Bad Gateway

  • Betroffene App
    WoltLab Suite Core

    Hallo,

    ein Kunde hat ein Fehler mit meinem Plugin xxx gemeldet. Für eingeloggte Nutzer (also sobald das Plugin greift, erscheint ein 502 Bad Gateway Fehler). Es wird PHP 7 genutzt.
    Das Problem ist Zeile 10:


    Kommentiere ich diese aus, dann funktioniert alles. Es scheint hier Probleme mit dem Mailversand zu geben. Ob das nun am WCF und PHP 7 oder einer fehlerhaften Mail-Konfiguration liegt, kann ich als Aussenstehender nicht sagen.
    Das Mail-Objekt sieht so aus:

  • Mehr als das konnte dem Log nicht entnommen werden:

    Code
    [Mon Dec 21 17:19:12.480717 2015] [fcgid:warn] [pid 21753] (104)Connection reset by peer: [client 176.4.68.134:58693] mod_fcgid: error reading data from FastCGI server, referer: <a dir="ltr" href="https://www.xxx.de/new-login-confirmation/" x-apple-data-detectors="true" x-apple-data-detectors-type="link" x-apple-data-detectors-result="9">https://www.xxx.de/new-login-confirmation/</a>
    [Mon Dec 21 17:19:12.480773 2015] [core:error] [pid 21753] [client 176.4.68.134:58693] End of script output before headers: index.php, referer: <a dir="ltr" href="https://www.xxx.de/new-login-confirmation/" x-apple-data-detectors="true" x-apple-data-detectors-type="link" x-apple-data-detectors-result="12">https://www.xxx.de/new-login-confirmation/</a>
  • Habe seit PHP 7 auch Probleme beim Mailversand. Glaube es Ist bekannt, habe es auch meinem Provider etc gemeldet, weil es schien als ob er dafür verantwortlich ist.
    Bei mir kommt diese Fehlermeldung:


    Wed, 23 Dec 2015 09:35:52 +0000
    Message: PHP warning in file /var/www/vhosts/x.com/httpdocs/wcf/lib/system/io/RemoteFile.class.php (95): stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:
    error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
    File: /var/www/vhosts/x.com/httpdocs/wcf/lib/system/WCF.class.php (309)
    PHP version: 7.0.0
    WCF version: 2.1.9 (Typhoon)
    Request URI: /mail/4-duke/
    Referrer: https://www.cosirex.com/mail/4-duke/
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko
    Information: ""
    Stacktrace:
    #0 [internal function]: wcf\system\WCF::handleError(2, 'stream_socket_e...', '/var/www/vhosts...', 95, Array)
    #1 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/io/RemoteFile.class.php(95): stream_socket_enable_crypto(Resource id #24, true, 9)
    #2 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/mail/SMTPMailSender.class.php(92): wcf\system\io\RemoteFile->setTLS(true)
    #3 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/mail/SMTPMailSender.class.php(169): wcf\system\mail\SMTPMailSender->connect()
    #4 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/mail/Mail.class.php(260): wcf\system\mail\SMTPMailSender->sendMail(Object(wcf\system\mail\Mail))
    #5 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/MailForm.class.php(156): wcf\system\mail\Mail->send()
    #6 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/AbstractForm.class.php(63): wcf\form\MailForm->save()
    #7 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/AbstractForm.class.php(114): wcf\form\AbstractForm->submit()
    #8 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/AbstractCaptchaForm.class.php(63): wcf\form\AbstractForm->readData()
    #9 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/MailForm.class.php(168): wcf\form\AbstractCaptchaForm->readData()
    #10 /var/www/vhosts/x.com/httpdocs/wcf/lib/page/AbstractPage.class.php(273): wcf\form\MailForm->readData()
    #11 /var/www/vhosts/x.com/httpdocs/wcf/lib/form/MailForm.class.php(198): wcf\page\AbstractPage->show()
    #12 /var/www/vhosts/x.com/httpdocs/wcf/lib/page/AbstractPage.class.php(100): wcf\form\MailForm->show()
    #13 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/request/Request.class.php(58): wcf\page\AbstractPage->__run()
    #14 /var/www/vhosts/x.com/httpdocs/wcf/lib/system/request/RequestHandler.class.php(139): wcf\system\request\Request->execute()
    #15 /var/www/vhosts/x.com/httpdocs/index.php(10): wcf\system\request\RequestHandler->handle('wbb')
    #16 {main}

  • Hallo,
    erstmal danke für die Hilfe bei dem Problem, dass ist jetzt wenigstens schonmal ein Ansatzpunkt.
    Konte das Problem allerdings noch nicht beheben.

    @Chris
    Ich schaue noch mal nach den PHP Error Log

    Hab jetzt mal auf SMTP als Versand im Forum umgestellt und bekomme da folgende Fehlermeldung per E-Mail.


    Ich schaue noch mal die Log Dateien durch und poste dann mal das Ergebnis.

    Viele Grüße und schöne Weihnachten
    Markocat

  • Hallo,

    hab es jetzt nach vielen Versuchen hinbekommen. :)
    Der Fehler lag am Zertifikat, welches ich noch mal Neu Installiert habe, da der Private Key als Inhalt mit benötigt wurde.

    Jetzt Schickt es mir den Bestätigungscode vom Plugin korrekt als E-Mail zu und es kommt keine Fehlermeldung.

    Kann allerdings nur SMTP als Versandart benutzen, da es bei PHP Weiterhin einen 502 Fehler gibt.
    Zumindest bin ich schonmal Froh das, dass Plugin so Funktioniert.

  • Bin auch nur durch Zufall drauf gestoßen, neu registrierte kriegen nach dem Absenden einen Whitescreen und keine Bestätigungsmail.
    Hatten php7, jetzt wieder zu php 5.5.30 gewechselt, da klappt der E-Mail Versand auch mit SSL problemlos.
    Weiß jemand schon etwas neues? Werde es jetzt erstmal auf dem normalen php lassen. mysqldumper ist auch noch nicht php7 konform ;)

    • Offizieller Beitrag

    Laut Syslog ist die Fehlermeldung die beim PHP-Versand mit 7.0.x kommt ist:

    Code
    kernel: [146929.379214] php-cgi[3290]: segfault at 600000019 ip 00007f0d75819e73 sp 00007ffe357c8b38 error 4 in libc-2.19.so[7f0d75793000+1bb000]


    Die Versionsnummer von libc variiert je nach Distribution.

    • Offizieller Beitrag

    Hallo,

    Kann man eventuell mal das Log-Level vom NGINX auf debug hochschrauben

    wozu? Der nginx hat nichts mit PHP zu tun.

    oder wie von @TimWolla bereits erwähnt, mal mit dem GNU Debugger "in" den Prozess schauen?

    Das hier ist das einzige, was jetzt noch Erkenntnisse bringt. Vorgehensweise ist wie folgt:

    • gdb -p XXX wobei XXX wie PID einer der PHP-Prozesse ist.
    • Im GDB: cont
    • Solange E-Mails verschicken, bis durch Zufall der passende PHP-Prozess getroffen wird (am besten an sich selbst, damit man keinen Nutzer "belästigt")
    • bt für einen Backtrace. cont, damit der Prozess auch wirklich stirbt.
    • Entweder selbst analysieren, oder herzeigen (gerne auch per Konversation oder Ticket)

    Möglicherweise muss man die Debug-Symbole nachinstallieren. Wenn gewünscht, dann kann ich nach Neujahr auch einen Blick darauf werfen. SSH-Zugangsdaten in diesem Fall bitte per Ticket. Mein SSH-Key wäre ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAm3N00xQE1Xor7JqLWORzXDyj6bkzZrLehf89ZMAJlejlJnhCwPVIm+buMzkzwdT5F5r48BksMGsavwVfS3Sfb9jQebl64F+QbDyriqyWwi9lsE+OVJTGoIxF+kya5XN4FCL37FGquKwsCs+sv7UYPWiXymENWZFfH+/O5+6sdgi37hdEACbL8rARvUeSV/v9g5T3CDz3ECUMl7YeoPnVSx8Ya8ZgIMC2Wys/VeeumFuX9/PYn7X54JJJrV5bWmrMzrNbU0E17q/WHa0V7SO6wgfxxaEuTKiZK7rmflaBYQ6RAOM1k6uN1olRkWwQmawvZYRFCRSBGzxYvjAYX4bc+w= TimWolla. Teilt bitte auch mit, wo die jeweilige PHP-Binary herkommt (Selbst kompiliert, dotdeb, Debian Backports o.Ä.)

  • hier bitte

    edit: ohne debug symbole, die werde ich gleich nachreichen


    edit:

    hab dafür jetzt extra php mit --enable-debug neu kompiliert ;)

    edit: habe es direkt von source kompiliert http://de1.php.net/distributions/php-7.0.2.tar.bz2
    der configure command ist folgender

    Code
    ./configure --enable-debug --disable-static --prefix=/opt/php-7.0 --with-config-file-path=/opt/php-7.0/etc --with-config-file-scan-dir=/opt/php-7.0/etc/conf.d --enable-bcmath=shared --enable-calendar --enable-fpm --enable-intl=shared --enable-mbstring --enable-mysqlnd=shared --enable-ftp=shared --enable-pdo=shared --enable-shmop=shared --enable-soap=shared --enable-sockets=shared --enable-zip=shared --with-curl=shared --with-freetype-dir=/usr --with-gd=shared --with-gettext=shared,/usr --with-gmp=shared --with-imap=shared --with-imap-ssl --with-jpeg-dir=/usr --with-kerberos --with-libxml-dir=/usr --with-mcrypt=shared,/usr --with-mhash=shared,/usr --with-mysqli=shared,/usr/bin/mysql_config --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-openssl --with-openssl-dir=/usr --with-pdo-mysql=shared,/usr --with-pdo-sqlite=shared,/usr --with-png-dir=/usr --with-sqlite3=shared,/usr --with-xsl=shared,/usr --with-zlib --with-zlib-dir=/usr

    MfG Stricted

    3 Mal editiert, zuletzt von Jan Altensen (16. Januar 2016 um 21:02)

    • Offizieller Beitrag

    Hallo,

    @Jan Altensen und ich haben via Konversation daran gearbeitet das eigentliche Problem zu suchen und es mittlerweile gefunden. Es ist definitiv ein Bug in der Verarbeitung der E-Mail innerhalb von PHP selbst (d.h. kein Fehler des WCF). Ich werde schauen, ob ich das Problem in PHP selbstständig korrigiert bekomme und dort sonst einen Bug-Report eröffnen.

    Kurzfristige Abhilfe schafft folgendes:

    • Den E-Mail-Versand auf SMTP umzustellen (das ist grundsätzlich zu empfehlen)
    • Auf eine PHP-Version vor 7 zurückzukehren.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!