News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

Forum nicht mehr erreichbar wg. PHP5.5.0- preg_replace() Modifier "e" deprecated

Started by ripystys, August 08, 2013, 04:50:22 AM

Previous topic - Next topic

ripystys

Hallo allerseits,

seit mein Provider auf PHP5.5.0 umgestellt hat, ist mein Forum nicht mehr zugänglich. Ich bekomme lediglich folgende Rückmeldungen:

Quote8192: preg_replace() [<a href='http://de.php.net/function.preg-replace'>function.preg-replace</a>]: The /e modifier is deprecated, use preg_replace_callback instead
Datei: /users/850/www/forum/Sources/Load.php(225) : runtime-created function
Zeile: 3

oder:
QuoteDeprecated: preg_replace() [function.preg-replace]: The /e modifier is deprecated, use preg_replace_callback instead in /users/850/www/forum/Sources/Load.php(225) : runtime-created function on line 3
[Anm.: dieselbe Zeile gleich 3x hintereinander]

2: session_start() [<a href='http://de.php.net/function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /users/850/www/forum/Sources/Load.php(225) : runtime-created function:3)
/users/850/www/forum/Sources/Load.php
1976

Mit einem einfachen Umbenennen der Funktion von preg_replace in preg_replace_callback ist es ja nicht getan, und die Detailkenntnis zur korrekten Umsetzung übersteigt bei dem verwendeten Wust an Sonderzeichen mein Wissen - ich stehe da wie der Ochs vorm (Backslash-)Lattenzaun.
Weil ich viele MODs verwendet habe und es beim Update seit SMF1.1.12 zu viele fatalen Fehlermeldungen kam, habe ich den Stand so belassen und die wichtigsten Updates manuell durchgeführt (sofern dann keine "fatal errors" kamen).

Die Funktion preg_replace() ist mit dem Modifier "e" auch noch in späteren SMF1.1.x- Releases enthalten, so dass Updates meines Erachtens keine befriedigende Lösung bringen würden.

Vielleicht ist es ja nur eine "Kleinigkeit", aber vor diesem Problem muss ich jetzt nach etlichen Try&Error-Einsätzen kapitulieren.
Weiß jemand Rat?

Die Funktion kommt bei mir in folgenden Dateien vor:
Quote from: Subs-Mobiquo.php
02598: $ent_list = empty($modSettings['disableEntityCheck']) ? '&(#\d{1,7}|quot|amp|lt|gt|nbsp);' : '&(#021|quot|amp|lt|gt|nbsp);';
02599: $ent_check = empty($modSettings['disableEntityCheck']) ? array('preg_replace(\'~(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)~e\', \'$func[\\\'entity_fix\\\'](\\\'\\2\\\')\', ', ')') : array('', '');
02600:
Quote from: Subs.php
01920: $data = preg_replace(
01921: '~(?<=[>;:!? ' . $non_breaking_space . '\]()]|^)([\w\.]{' . $modSettings['fixLongWords'] . ',})~e' . ($context['utf8'] ? 'u' : ''),
01922: "preg_replace('/(.{" . ($modSettings['fixLongWords'] - 1) . '})/' . ($context['utf8'] ? 'u' : '') . "', '\\\$1< >', '\$1')",
01923: $data);

02709: if (defined('SID') && SID != '')
02710: $setLocation = preg_replace('/^' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#]+?)(#[^"]*?)?$/e', "\$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2?' . SID", $setLocation);
02711: else
02712: $setLocation = preg_replace('/^' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?$/e', "\$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2'", $setLocation);
Quote from: Load.php
00182: $ent_list = empty($modSettings['disableEntityCheck']) ? '&(#\d{1,7}|quot|amp|lt|gt|nbsp);' : '&(#021|quot|amp|lt|gt|nbsp);';
00183: $ent_check = empty($modSettings['disableEntityCheck']) ? array('preg_replace(\'~(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)~e\', \'$func[\\\'entity_fix\\\'](\\\'\\2\\\')\', ', ')') : array('', '');
00184:
00185: // Preg_replace can handle complex characters only for higher PHP versions.
Quote from: QueryString.php
00454: if (defined('SID') && SID != '')
00455: $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?(?:' . SID . ';)((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html?' . SID . '\$2\"'", $buffer);
00456: else
00457: $buffer = preg_replace('/"' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+?)(#[^"]*?)?"/e', "'\"' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2\"'", $buffer);
Quote from: Admin.php
01471: $changes = array();
01472: foreach ($row as $column_name => $column_value)
01473: if ($column_name !== $primary_key && strpos($column_value, '&#') !== false)
01474: $changes[] = "$column_name = '" . addslashes(preg_replace('~(&#(\d{1,7}|x[0-9a-fA-F]{1,6});)~e', '$entity_replace(\'\\2\')', $column_value)) . "'";
01475:
Quote from: Subs-Auth.php
00584:
00585: $row['realName'] = preg_replace('~&#(\d+);~e', '$fixchar(\'$1\')', $row['realName']);
Quote from: News.php
00329:
00330: $val = preg_replace('/^' . preg_quote($scripturl, '/') . '\?((?:board|topic)=[^#"]+)(#[^"]*)?$/e', "'' . \$scripturl . '/' . strtr('\$1', '&;=', '//,') . '.html\$2'", $val);
00331: return $val;

PS: Die Smilies im "quote"-Code sind unbeabsichtigt, wollte nur das e etwas hervorheben.
Hinterher habens alle schon vorher gewusst.
Hindsight is always twenty-twenty.
(Billy Wilder)

marfi

Hi, vielleicht hilft erzwingen per htaccess.?
Probiere mit:
AddHandler application/x-httpd-php55 .php .php5 .php4 .php3

Aber ich sehe dein Forum. Hat sich etwas verändert inzwischen?
PS. Auf 1.1.18 kannst du allerdings updaten..
--

Dejv

Hello, has anyone solved this bug fo 1.1.18 or 1.1.19 ? I get thousands or error logs after update to php 5.5.

8192: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
/Load.php(198) : runtime-created function
/Subs.php
Line: 1883
SMF 1.1.20

Justyne

Würde empfehlen auf 2.0.8 upzudaten. SMF 1.1 ist eine alte Version und ist einfach nicht für 5.5 geplant. Klar kannst du das jetzt vielleicht noch hinbiegen, aber in der Zukunft wirst du da nur noch mehr Probleme mit bekommen. Das Supportende für 1.1 ist mittlerweile in Sicht.
Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better.

Dejv

Kann leider nicht auf smf2 updaten, weil ich es zusammen mit MKportal benutze und smf2 nicht unterstützt wird :(
SMF 1.1.20

Advertisement: