Opened 4 years ago

Last modified 2 years ago

#60 new Fehler

Alte t29-Wiki im Vintage-Archiv funktioniert nicht mehr

Reported by: sven Owned by:
Priority: major Milestone: Alvotech: vServer zu KVM-Migration fertig
Component: t29-Server Severity: unbekannt
Keywords: Cc:

Description

Die nur-lesen geschaltete erste Wiki von technikum29 (pmWiki) unter http://old.technikum29.de/wiki funktioniert nicht mehr: Alle Seiten zeigen leeren Inhalt. Dies liegt möglicherweise daran, dass der /e-Modified in preg_replace nun seit PHP 5.5 deaktiviert wurde (http://php.net/manual/de/migration55.deprecated.php), darauf deuten zumindest die zahlreichen PHP-error-Meldungen im error.log von Apache hin:

[Sun Jan 11 17:50:10.429307 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 739, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen
[Sun Jan 11 17:50:10.429324 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 742, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen
[Sun Jan 11 17:50:10.429355 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 380, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen
[Sun Jan 11 17:50:10.429371 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 750, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen
[Sun Jan 11 17:50:10.429380 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 754, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen
[Sun Jan 11 17:50:10.429470 2015] [:error] [pid 6210] [client 37.201.169.246:43515] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 769, referer: http://old.technikum29.de/wiki/pmwiki.php?n=Strukturierung.Willkommen

und davon wiederum gibt es einige:

me@t29kvmalvo:/home/heribert/technikum29.de/vintage/wiki% find | grep php | xargs grep preg_replace | grep "/e"
./pmwiki.php:  { return preg_replace('/[\\x80-\\xff \'"]/e', "'%'.dechex(ord('$0'))", $x); }
./pmwiki.php:              . preg_replace( '/^(?![\'"]).*$/e',
./pmwiki.php:  $value = preg_replace("/$KeepToken(\\d.*?)$KeepToken/e",
./pmwiki.php:  $fmt = preg_replace('/\\$([A-Z]\\w*Fmt)\\b/e','$GLOBALS[\'$1\']',$fmt);
./pmwiki.php:  $fmt = preg_replace('/\\$\\[(?>([^\\]]+))\\]/e',"XL(PSS('$1'))",$fmt);
./pmwiki.php:    preg_replace('/\\{(\\$[A-Z]\\w+)\\}/e', "PageVar(\$pagename, '$1')", $fmt);
./pmwiki.php:  $fmt = preg_replace("/(?:$pvpat)\\b/e", "PageVar(\$pagename, '$0')", $fmt);
./pmwiki.php:  $fmt = preg_replace('/(?>(\\$[[:alpha:]]\\w+))/e',
./pmwiki.php:    $text = preg_replace("/\\{\\$($pat)\\}/e", 
./pmwiki.php:  echo preg_replace('/\\$\\[([^\\]]+)\\]/e', "XL(PSS('$1'))", $msg);
./pmwiki.php:  $x = preg_replace("/$KeepToken(\\d.*?)$KeepToken/e", "\$KPV['\$1']", $x);
./pmwiki.php:  return preg_replace("/$EscapePattern/es", "Keep(PSS('$0'))", $text);
./pmwiki.php:  return preg_replace("/$KeepToken(\\d.*?)$KeepToken/e", "\$KPV['$1']", $text);
./scripts/pagelist.php:    $condspec = preg_replace("/$varpat/e",
./scripts/pagelist.php:            $curr = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
./scripts/pagelist.php:            $next = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
./scripts/pagelist.php:      $item = preg_replace('/\\{(=|&[lg]t;)(\\$:?\\w+)\\}/e',
./scripts/wikistyles.php:  $x = preg_replace("/\\b(href|src)=(['\"]?)[^$UrlExcludeChars]+\\2/e",
./scripts/wikistyles.php:  $x = preg_replace("/\\bhttps?:[^$UrlExcludeChars]+/e", "Keep('$0')", $x);
./scripts/pagerev.php:            preg_replace('/\\(:.*?:\\)/e',"Keep(PSS('$0'))",join("\n",$in)));
./scripts/pagerev.php:            preg_replace('/\\(:.*?:\\)/e',"Keep(PSS('$0'))",join("\n",$out)));
./scripts/markupexpr.php:  $expr = preg_replace('/([\'"])(.*?)\\1/e', "Keep(PSS('$2'),'P')", $expr);
./scripts/markupexpr.php:  $expr = preg_replace('/\\(\\W/e', "Keep(PSS('$2'),'P')", $expr);
./scripts/upload.php:  $x = preg_replace('/\\.[^.]*$/e', "strtolower('$0')", $x);
./scripts/stdmarkup.php:  $key = preg_replace('/end$/', '', $name);

Leider sind das nicht mal alle Vorkommnisse, denn noch öfter wird preg_replace komplett mit Variablen aus obskuren Überfunktionen aufgerufen. Suchen nach /e in der PmWiki-Codebase liefert über 122 Vorkommnisse.

Es ist daher wohl mit einem einfachen Codeumschreiben nicht getan. Ein Upgrade von PmWiki möchte ich nicht machen. Vielleicht kann man ein intelligentes Monkeypatching ermöglichen oder PHP in irgendeinen Kompatibilitätsmodus bringen, zumindest für den PmWiki-Code (ini_set und Freunde).

Change History (5)

comment:1 Changed 4 years ago by sven

  • Milestone set to Alvotech: vServer zu KVM-Migration fertig

Sammeln von Tickets.

comment:3 Changed 2 years ago by sven

Okay, also in PHP 5.6 ist preg_replace mit e-Modifier noch drin, nur eben mit Warnung, erst ab PHP 7 wurde es entfernt. Das bedeutet, dass die Wiki eigentlich funktionieren müsste! Es hat also einen komplett anderen Grund, dass sie es derzeit nicht tut.

comment:4 Changed 2 years ago by sven

Fun Fact: 60GB Fehlermeldungen vom Stil

[Fri Feb 03 12:39:14.483089 2017] [:error] [pid 363] [client 141.2.246.170:35062] PHP Deprecated:  preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/heribert/technikum29.de/vintage/wiki/pmwiki.php on line 1471, referer: http://old.technikum29.de/wiki/pmwiki.php

in dem Apache Errorlog. Das ist oldschool.

comment:5 Changed 2 years ago by sven

Das einzige was hier wohl noch hilft, ist die Wiki mit einer älteren PHP-Version auf einem anderen Rechner auszuprobieren und dann alle Seiten als statische HTML-Seiten zu speichern (wget).

Note: See TracTickets for help on using tickets.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License