[Gelöst] Umstellung von PHP 5.4 auf PHP 5.6 macht Problem

Diskussion zum Formular-Modul für ConPresso 4
Antworten
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

[Gelöst] Umstellung von PHP 5.4 auf PHP 5.6 macht Problem

Beitrag von Mr. Magpie »

Seit der Umstellung auf PHP 5.6 funktioniert die Mail-Kodierung nicht mehr richtig. In den Einstellungen von mod_form habe ich "ISO-8859-1 erzwingen" gewählt und das soll auch so bleiben.

Unter PHP 5.6 erscheinen dann plötlzich die Umlaute im Betreff nicht mehr korrekt und der Mail-Body ist ganz leer. Ausprobiert habe ich es sowohl bei 1&1 als auch bei All-Inkl.

Beispiel einer unter PHP 5.4 generierten Mail:

Code: Alles auswählen

Return-Path: <info@########.de>
Received: from [217.72.192.67] ([217.72.192.67]) by mx.kundenserver.de
 (mxeue104) with ESMTPS (Nemesis) id 0MZySV-1aUcNg1Irv-00LpAE for
 <########@########.de>; Mon, 21 Mar 2016 15:10:19 +0100
Received: from dd15816.kasserver.com ([85.13.136.250]) by mx.kundenserver.de
 (mxeue104) with ESMTPS (Nemesis) id 0Mg3G9-1aNTW21EsH-00NRie for
 <formulartest@########.de>; Mon, 21 Mar 2016 15:10:19 +0100
Received: by dd15816.kasserver.com (Postfix, from userid 1020)
	id 5C1F45B8410D; Mon, 21 Mar 2016 15:10:17 +0100 (CET)
To: formulartest@########.de
Subject: Nachricht =?ISO-8859-1?Q?=FCber=20Kontakt-Formular?=
From: formulartest@########.de
Cc: 
Reply-To: formulartest@########.de
Content-Type: text/plain; format=flowed; charset="ISO-8859-1"
X-Mailer: mod_form by conpresso4.de
Message-Id: <20160321141017.5C1F45B8410D@dd15816.kasserver.com>
Date: Mon, 21 Mar 2016 15:10:17 +0100 (CET)
Envelope-To: <guenther@########.de>

Folgende Daten wurden am 21.03.2016 um 15:10 Uhr über das Kontakt-Formular von www.########.de übermittelt:

Name: Günther Noch ein Test

E-Mail-Adresse: formulartest@########.de

Telefon: 


Mitteilung:

Noch ein Test: äöüÄÖÜ€
Und mit genau dem selben ins Nachrichten-Feld des Formulars eingegebenen Text unter PHP 5.6:

Code: Alles auswählen

Return-Path: <info@########.de>
Received: from [212.227.15.41] ([212.227.15.41]) by mx.kundenserver.de
 (mxeue008) with ESMTPS (Nemesis) id 0M5dph-1ZpFB52tCa-00xZ9j for
 <guenther@########.de>; Mon, 21 Mar 2016 15:14:19 +0100
Received: from dd15816.kasserver.com ([85.13.136.250]) by mx.kundenserver.de
 (mxeue008) with ESMTPS (Nemesis) id 0LaEeN-1a43092aXm-00m63d for
 <formulartest@########.de>; Mon, 21 Mar 2016 15:14:19 +0100
Received: by dd15816.kasserver.com (Postfix, from userid 1020)
	id 566B85B8410D; Mon, 21 Mar 2016 15:14:17 +0100 (CET)
To: formulartest@########.de
Subject: Nachricht =?ISO-8859-1?Q?=3Fber=20Kontakt-Formular?=
From: formulartest@########.de
Cc: 
Reply-To: formulartest@########.de
Content-Type: text/plain; format=flowed; charset="ISO-8859-1"
X-Mailer: mod_form by conpresso4.de
Message-Id: <20160321141417.566B85B8410D@dd15816.kasserver.com>
Date: Mon, 21 Mar 2016 15:14:17 +0100 (CET)
Envelope-To: <########@########.de>

Dateianhänge
Im entsprechenden Formulardaten-Artikel erscheinen die Daten richtig - s. Screenshot
Im entsprechenden Formulardaten-Artikel erscheinen die Daten richtig - s. Screenshot
Zuletzt geändert von Mr. Magpie am 23.03.2016 10:07, insgesamt 1-mal geändert.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Prüfe mal, ob das Formular bei der Eingabe als ISO oder UTF codiert wird.
Die Default-Einstellung von 1&1 bei 5.6 ist leider UTF-8.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Wie finde ich das heraus?

Wenn ich mir im Browser Quelltext bzw. Seiteninformationen der Formularseite ansehe, ist die ISO-8859-1. Eine entsprechende Zeile befndet sich in der ../_include/common.inc.php:

header('Content-type: text/html; charset=ISO-8859-1');

Aber mail() schert sich nicht darum
Günther Ludwig
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Alle charsets sind defaultmäßig auf "no value" laut phpinfo()

Das habe ich zwar gefunden: https://www.saotn.org/php-56-default_ch ... ml-output/

Aber der default_charset lässt sich nicht per php.ini ändern
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Im IE per Rechtsklick bei Codierung zu sehen (siehe Bild).

Bei 1&1 lässt es sich prima einstellen wenn man in JEDES Verzeichnis eine php.ini mit folgendem Inhalt stellt:

Code: Alles auswählen

default_charset = "iso-8859-1"
Habe ich erst gestern durchexerziert.
Mit Shell-Zugriff reicht auch eine, die per Symbolic-Link in alle Verzeichnisse gespiegelt wird. Anleitung in den FAQ.

Aber eigentlich sollte die Header-Zeile reichen.

Die Konvertierung des Betreffs übernimmt ja die Funktion mb_encode_mimeheader, dann muss aber auch mit der richtigen Codierung gefüttert werden. Daher dachte ich an falsche Codierung der Formularseite.
Dateianhänge
codierung.jpg
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Bei 1&1, da gebe ich dir Recht, kann ich den default_charset per php.ini beeinflussen.
Die Betreffzeile wird auch da falsch codiert, aber der Mail-Body enthält wenigstens den richtigen Inhalt.

Nicht so bei All-Inkl. Aber mein Kunde ist nun endlich von der Telekom zu All-Inkl gewechselt und daher muss es jetzt dort irgendwie klappen.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Und wie wird jetzt das Formular, also die Seite wo man die Daten eintippt, codiert?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

wie es sich gehört: ISO-8859-1
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Tja, da helfen dann nur ein Stapel Kontrollausgaben.

Nach Ostern werde ich das mal auf PHP 5.6 und 7 probieren.

1&1 bietet einen verlängerten Support für PHP 5.4.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Aber es geht ja um All-Inkl, so dass ich dort auf PHP 5.4 wieder wechsle.
Andere Kunden - die meisten - sind allerdings bei 1&1
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7361
Registriert: 01.01.1970 01:00
Hat sich bedankt: 110 Mal
Danksagung erhalten: 933 Mal
Kontaktdaten:

Beitrag von MarkusR »

Bei All-Inkl kann ich aber nicht testen.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Da würde ich dir ggf. was zu einrichten. Okay?
Günther Ludwig
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Gelöst!!

Beitrag von Mr. Magpie »

Ich habe es jetzt gelöst bekommen 8)

Das Problem bestand aus mehreren Teilen:

a) Konnte ich bei All-Inkl die nötigen Einstellungen nicht durch eine php.ini setzen. Die php.ini wurde schlichtweg ignoriert.

b) Die Codierung des Mail-Body erfolgt anders als die der Betreff-Zeile, es brauchte folglich auch zwei verschiedene Lösungen


Zunächst zum Mailbody:

Dieser war unter PHP 5.6 stets komplett leer!!
Daran änderte sich nichts, ganz gleich, welchen Wert $encoding in der Zeile

Code: Alles auswählen

$contentType = 'Content-Type: text/plain; format=flowed; charset="'. $encoding . '"' . $newline;
von ../mod_form/includes/actions.inc.php annahm.
Bald war mir klar, das musste an der default_charset-Einstellung liegen, welche bei mir (All-Inkl) laut phpinfo() immer "no value" hatte.
Hier fand ich, dass ich den default_charset auch über die .htaccess im Root-Verzeichnis von ConPresso setzen konnte.
Ich hab' dann also in die .htaccess die Zeile

Code: Alles auswählen

php_value default_charset ISO-8859-1
eingefügt... und schon ging's! :)


Die Betreffzeile:

Wie Markus erwähnte, wird diese per mb_encode_mimeheader() codiert.
Wenn ich diese Funktion in ../mod_form/includes/actions.inc.php ganz weg ließ, blieb die Betreffzeile uncodiert, aber alle Umlaute blieben erhalten (getestet in Thunderbird).
In php.net las ich hier, dass die Funktion mb_encode_mimeheader() abhängig ist von einem korrekt gesetzten Wert von mbstring.internal_encoding. Auch diese Einstellung hatte bei All-Inkl "no value".

Diesen setzte ich nun analog zum default_charset in der .htaccess-Datei:

Code: Alles auswählen

php_value mbstring.internal_encoding ISO-8859-1
Bingo - das war's!! :D :D :D
Günther Ludwig
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

[gelöst] php_value -> Internal Server Error 500

Beitrag von Mr. Magpie »

Bei 1&1 führt die Verwendung von php_value in der .htaccess-Datei zu einem Internal Server Error 500.

Aber auch bei Shared Webhosting-Paketen bei 1&1 kann man die notwendigen Einstellungen zentral setzen! :D

Und zwar erstellt man eine Textdatei names ".user..ini" (wichtig ist der Punkt vor "user") im ConPresso-Root-Verzeichnis mit folgendem Inhalt:

Code: Alles auswählen

default_charset = "iso-8859-1"
mbstring.internal_encoding = "iso-8859-1"
Diese Einstellung gilt dann auch in allen Unterverzeichnissen 8)
Günther Ludwig
Antworten