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

Diskussion zum Formular-Modul für ConPresso 4
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 02: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>

Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von Mr. Magpie am 23.03.2016 11:07, insgesamt 1-mal geändert.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

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 02: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 02: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: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

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.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
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 02: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: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

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 02: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: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

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 02: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: 7381
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

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 02: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 02: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 02: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