Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 05. Dezember 2015 23:12

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.815
Webseite

CMSMS-1 und PHP 7

Auf den ersten Blick läuft meine Seite unter 1.12.x stabil mit PHP 7.0. Geschwindigkeitstests habe ich bisher jedoch keine gemacht.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#2 05. Dezember 2015 07:05

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: CMSMS-1 und PHP 7

nockenfell schrieb:

Auf den ersten Blick läuft meine Seite unter 1.12.x stabil mit PHP 7.0.

Na das klingt doch erst mal schon gut, nachdem an anderer Stelle bereits böse Unkenrufe erklangen ...


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#3 11. Februar 2016 22:07

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: CMSMS-1 und PHP 7

nockenfell schrieb:

Auf den ersten Blick läuft meine Seite unter 1.12.x stabil mit PHP 7.0.

Hab auch gerade mal geschaut - eine frische Installation auf einem XAMPP mit PHP 7.0.2 scheitert am massenhaften Auftreten dieser Fehlermeldung

Warning: strpos(): Empty needle in C:\xampp\htdocs\1-12-1\lib\smarty\libs\sysplugins\smarty_internal_templatelexer.php on line 316

Vermutlich rächt sich hier der Einsatz der alten Smarty-Version, die noch nicht bereit für PHP7 ist ...


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#4 12. Februar 2016 00:23

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: CMSMS-1 und PHP 7

Hatte im SVN etwas von PHP7 Fixes gelesen - und war natürlich neugierig, wie der vorgenannte Fehler behoben wurde.

Leider in Orks-typischer Manier ... nämlich gar nicht. Das sieht dann z.Bsp. so aus (Änderung rot fett)

if ($this->smarty->auto_literal && ($this->mbstring_overload ? (mb_strpos(" \n\t\r",mb_substr($this->value,$this->ldel_length,1,'latin1'),0,'latin1') !== false) : (@strpos(" \n\t\r",substr($this->value,$this->ldel_length,1)) !== false))) {

Die Fehlermeldung wurde lediglich unterdrückt. Und dazu ("@") hatte ich mich ja bereits in der Vergangenheit geäußert sad

http://www.cmsmadesimple.de/forum/viewt … 513#p34513

Aber sei es drum - zumindest lief mit Übernahme dieser Änderungen

viewsvn.cmsmadesimple.org/comp.php?repname=cmsmadesimple&path=%2F&compare[]=%2F@10348&compare[]=%2F@10349

viewsvn.cmsmadesimple.org/comp.php?repname=cmsmadesimple&path=%2F&compare[]=%2F@10355&compare[]=%2F@10356

die Installation weiter. Den nächsten Stolperstein gab es beim Aufbau der Datenbank-Verbindung

Parse error: Invalid numeric literal in C:\xampp\htdocs\1-12-1\lib\adodb_lite\adodb-time.inc.php on line 757

Da finden sich zwar ein paar Hinweise

https://bugs.php.net/bug.php?id=70193
https://bugs.php.net/bug.php?id=71086

die mir aber erst einmal nicht weitergeholfen haben. Auch der Versuch, eine Anleihe bei der adodb-time.inc.php der Vollversion AdoDB 5.20.1 zu nehmen (die vor kurzem ein Update für PHP7 erhielt) als auch der Blick in die Sourcen von CMSMS-2 haben mich da nicht weiter gebracht.

Da ich eine Änderung innerhalb von AdoDB vermutet habe, hab ich nun einfach CMSMS die vorgenannte Vollversion von AdoDB untergeschoben. Und siehe da - die Installation lief weiter.

Schon fast erwartungsgemäß gab es weitere Fehler (ein paar Notices, ein Aufruf eines in PHP nicht mehr vorhandenen Befehls set_magic_quotes_runtime(), und ... und ...) und konnten auch ein Großteil der Tabellen nicht angelegt werden.

Hmm, ich glaub, ich mach dann besser erst mal Schluß  neutral ...

Beitrag geändert von cyberman (12. Februar 2016 00:24)


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#5 12. Februar 2016 05:40

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.815
Webseite

Re: CMSMS-1 und PHP 7

Danke für deine Forschungen. Unter PHP7 habe ich beim mir festgestellt, dass AdvancedContent nicht läuft. Ob dies wirklich mit PHP7 zusammenhängt kann ich nicht 100% sagen, da ich kein PHP Downgrade zum testen ausgeführt habe. Ebenso habe ich mit btAdminer einige Fehlermeldungen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#6 15. Februar 2016 00:18

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: CMSMS-1 und PHP 7

nockenfell schrieb:

Ebenso habe ich mit btAdminer einige Fehlermeldungen.

Möglicherweise musst du nur das Basis-Script austauschen

https://www.adminer.org/de/ schrieb:

Version 4.2.4, 2016-02-06

Dessen Aktualität lässt zumindest auf Kompatibilität mit PHP7 schließen; zumindest auf den ersten Blick scheint es zu funktionieren. Hab bei meinem Kurztest auf Xampp keine Probleme feststellen können.


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#7 08. Oktober 2016 14:22

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.879
Webseite

Re: CMSMS-1 und PHP 7

cyberman schrieb:

eine frische Installation auf einem XAMPP mit PHP 7.0.2 scheitert am massenhaften Auftreten dieser Fehlermeldung

Warning: strpos(): Empty needle in C:\xampp\htdocs\1-12-1\lib\smarty\libs\sysplugins\smarty_internal_templatelexer.php on line 316

Vermutlich rächt sich hier der Einsatz der alten Smarty-Version, die noch nicht bereit für PHP7 ist ...

Der Vollständigkeit halber - ohne die Unterdrückung via @ bekommt man es so hin

  if ($this->smarty->auto_literal && substr($this->value, $this->ldel_length, 1) <> '' && ($this->mbstring_overload ? (mb_strpos(" \n\t\r", mb_substr($this->value, $this->ldel_length, 1, 'latin1'), 0, 'latin1') !== FALSE) : (strpos(" \n\t\r", substr($this->value, $this->ldel_length, 1)) !== FALSE))) {

Konkret müssen die Zeilen 316 und 1123 in der Datei smarty_internal_templatelexer.php durch die eben genannte Zeile ersetzt werden.


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMS/ms
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#8 01. September 2018 11:23

Metamorphose
probiert CMS/ms aus
Ort: Aarau, Schweiz
Registriert: 18. November 2012
Beiträge: 20

Re: CMSMS-1 und PHP 7

Da mein Hoster PHP 5.6 und 7.0 in 6 Monaten abschaltet, da sie nicht mehr supported werden, bin ich momentan dran, meine CMSms 1.12.1-Seite (ich bin, wie einige hier, kein Fan der CMsms 2.x, obwohl ich eine kleinere Seite bereits umgestellt habe) unter PHP 7.1 zum Laufen zu bringen.

Das Meiste läuft bereits mit den Tipps aus diesem Forum, vielen Dank dafür.

Bei mir kommen aber zwei weitere strpos() Warnungen in der templatelexer.php.
Die Warnung kommt auch wenn ich die Zeile 858 mit der Variante von Cyberman aus Post #7 ersetze und sogar wenn ich vor strpos ein @ setze.

Warnmeldung:

Warning: strpos(): Empty needle in /home/httpd/vhosts/domain/subdomains/dev/lib/smarty/libs/sysplugins/smarty_internal_templatelexer.php on line 858

Die Warnung wird verursacht wenn ich auf einer Seite einen GCB aufrufe, welcher folgenden Inhalt hat:

{if {$smarty.now|date_format:"%Y.%m.%d %H:%M"} > "2018.06.24 16:00" and {$smarty.now|date_format:"%Y.%m.%d %H:%M"} < "2018.08.30 17:00"}
<div class="ferien"> <p>Text für Betriebsferien</p> </div>
 {/if}

Die Warnung erscheint zweimal hintereinander (wahrscheinlich durch die beiden Smarty.now date-Funktionen) und nur beim ersten Aufruf nachdem der Seitencache gelöscht wurde.
Mir ist nicht ganz klar ob dies wirklich nur beim ersten Aufruf so ist oder die Besucher dann doch plötzlich immer wieder mal so unschöne Warnungen sehen. Vielleicht weiss jemand grad wo ich was ändern müsste, danke!

Gibt es evtl. schon Neuerungen zu der von cyberman geplanten PHP7-tauglichen CMSms-V1 Version?

Offline

#9 02. September 2018 20:56

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.188

Re: CMSMS-1 und PHP 7

Versuch es erstmal im Template damit:

{if $smarty.now|date_format:"%Y.%m.%d %H:%M" > "2018.06.24 16:00" && $smarty.now|date_format:"%Y.%m.%d %H:%M" < "2018.08.30 17:00"}
	<div class="ferien"> <p>Text für Betriebsferien</p> </div>
{/if}

Also ohne verschachtelte Smarty-Tags.

Konkret müssen die Zeilen 316 und 1123 in der Datei smarty_internal_templatelexer.php durch die eben genannte Zeile ersetzt werden.

Und die Zeile 858. Und ... Eben überall dort, wo mit strpos() geprüft wird, ob sich ein Leerzeichen oder Zeilenumbruch direkt hinter dem öffnenden linken Smarty-Delimiter befindet.

Dieser Fehler tritt auf, wenn das Template das erste mal kompiliert wird. Da wird vom Lexer erstmal geprüft, was es so alles zu verarbeiten gibt. Z.B. ob der Smarty-Tag ein Kommentar, Javascript oder CSS sein soll. Seit Smarty 3 müssen Kommentare ja nicht mehr mit einem Sternchen gekennzeichnet werden. Smarty ignoriert einfach von sich aus alle geschweiften Klammern, denen ein Leerzeichen oder ein Zeilenumbruch folgt.

Danach wird die kompilierte Version des Templates im Cache gespeichert und der Fehler tritt scheinbar nicht mehr auf. Weil der Lexer nicht mehr aktiv wird. Aber sobald der Zwischenspeicher gelöscht wird (z.B. nach Änderungen am Inhalt oder an Templates), tritt der Fehler wieder erneut einmal auf.

Der Fehler entsteht, wenn substr() an dieser Stelle nichts zurückgibt. Dann lautet die Anweisung an PHP sinngemäß "suche nach nichts in folgender Zeichenkette ..." - und damit kann PHP logischerweise nichts anfangen.

Das Problem ist, ich wüsste nicht warum substr() an dieser Stelle leer sein sollte. Möglicherweise liegt der Fehler bereits an $this->value. Vielleicht enthält das schon keinen gültigen Wert. Also einen leeren Wert oder einen Wert, der lediglich exakt genau so lang ist, wie der linke Smarty-Delimiter. Also z.B. nur ein einziges Zeichen. Dann würde man einen Teilstring extrahieren wollen, der außerhalb der Zeichenkette liegt. Und das ergibt "false". Ich habe aber leider keine Ahnung wie es dazu kommen könnte. Denn da müsste man meiner Meinung nach ansetzen. Wieso sollte der Lexer einen leeren oder zu kurzen String parsen?

In einer neueren Version von Smarty wird das übrigens so gelöst:

if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false)

D.h. die sind ihrer Tuning-Linie treu geblieben und haben haben die Funktionsaufrufe reduziert. D.h. man verzichtet einfach auf substr() und greift auf den String wie auf ein Array zu. Scheint mir allerdings auch eher nur ein Hack zu sein. Denn wie gesagt, wieso den Lexer mit etwas bemühen, was ohnehin keinen Erfolg hätte?

Offline

#10 03. September 2018 16:55

Metamorphose
probiert CMS/ms aus
Ort: Aarau, Schweiz
Registriert: 18. November 2012
Beiträge: 20

Re: CMSMS-1 und PHP 7

Hallo NaN

Super, vielen Dank für deine ausführliche Antwort. Ohne verschachtelte Smarty-Tags kommen die Warnungen nicht mehr. Wäre selber wohl nie drauf gekommen.

Offline

#11 03. September 2018 17:41

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.188

Re: CMSMS-1 und PHP 7

Ich verstehe diesen Lexer leider nicht. Es scheint keine zentrale Stelle zu geben, an der man diesen möglichen Fehler umgehen könnte. Aber ein kurzer Test hat ergeben, dass man in der Datei "lib/smarty/libs/sysplugins/smarty_internal_templatelexer.php" getrost alle Vorkommen von:

if ($this->smarty->auto_literal && ($this->mbstring_overload ? (mb_strpos(" \n\t\r",mb_substr($this->value,$this->ldel_length,1,'latin1'),0,'latin1') !== false) : (strpos(" \n\t\r",substr($this->value,$this->ldel_length,1)) !== false))) {

In diesen Code ändern kann:

if ($this->smarty->auto_literal && isset($this->value[ $this->ldel_length ]) ? strpos(" \n\t\r", $this->value[ $this->ldel_length ]) !== false : false) {

(düfte genau 27x auftreten)

Offline

#12 18. September 2018 21:34

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.090
Webseite

Re: CMSMS-1 und PHP 7

Eine Frage aus rein organisatorische Gründen.

Weil bald PHP 5.6 bei Hosteurope ausgeschaltet wird muss für meine Kunden etwas geregelt werden.

Entweder das CMS (meist 1.12.2) (und alle Module) flot machen für PHP 7.0 (besser 7.2), oder übersiedeln auf ein Server wo ich PHP 5.3 bis 7.2 unterstütze.

Ein Update auf 2.2.8 schein mir eigentlich keine Option weil dann vieles mit doch/nicht unterstützte Module auf mich zu kommt.

Was schlagt euch vor?

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#13 21. September 2018 08:22

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.394

Re: CMSMS-1 und PHP 7

Ich wünschte ich hätte eine bequeme Antwort...

Ich habe noch 16 CMSms Websites laufen von denen ich ein paar zu einem anderen CMS migrieren werde, und die Kunden dies auch bezahlen werden.
Der Rest...?... 2 kann ich auf 2.x updaten, die anderen eher nicht.

Die sind zum Glück bei einem Hoster der nicht mit Abschaltung von PHP 5.6 gedroht hat.

Was mich betrifft, werde ich einige Kunden kostenlos migrieren. Das werde ich sportllich sehen müssen, weil der Updatewahnsinn damit in Zukunft ein Ende hat.

Offline

#14 21. September 2018 10:43

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.188

Re: CMSMS-1 und PHP 7

Entweder das CMS (meist 1.12.2) (und alle Module) flot machen für PHP 7.0 (besser 7.2), oder übersiedeln auf ein Server wo ich PHP 5.3 bis 7.2 unterstütze.

Ich bin für beides.
Mir erscheint die Kombination von neuester PHP 7 Version und der letzten 5.6er die sinnvollste Variante, um in Ruhe die Anpassungen für die neueste Version vorzunehmen, ohne die Seite unbenutzbar zu machen. Hätte aber eigentlich schon vor einem Jahr passieren müssen ;-)  (Ja, ich hänge da auch massiv hinterher roll )
Bei mir läuft mit wenigen Handgriffen in AdoDB, Xajax, Smarty und CMSms Core zumindest lokal CMSms 1.12.2 unter PHP 7.2 stabil.
Allerdings nur mit der Standard-Installation (und AC). Und ich bin mir sicher, dass ich dabei noch nicht alle Features überprüft habe.
Eine vollständige Anpassung einer Website auf PHP 7.2 hängt von den verwendeten Modulen und Plugins ab. Bedeutet also eine Menge Arbeit. Vielleicht nicht unbedingt schwere Arbeit, aber zumindest zeitaufwendig. Zeit, in der die Website also noch problemlos weiterlaufen muss. Daher meine Meinung: Such einen Hoster mit PHP 5.6 und 7.2 und dann nimm die Anpassungen für jede Website für 7.2 lokal vor. Wenn alles läuft, auf den Server damit, auf PHP 7.2 wechseln, PHP 5.6 abschalten und Ruhe ist. Auf Dauer ist das nämlich kein Zustand.

Offline

#15 22. September 2018 14:22

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.090
Webseite

Re: CMSMS-1 und PHP 7

Danke für eure Reaktionen,

kurz, übersedlen nach meinem Rootserver wo 5.3 bis 7.2 (7.3) läuft.

Weiss eine eine bessere Idee um IMAP Mailkonten zu übersiedlen als:
ein extra E-Mail-Adresse,
alle Mails verschieben in dem Extra Adresse,
alte Adresse auf neue Server und
zurück schieben

MfG
Jan


Ubuntu 16.04 mit KDE - LAMP

Offline

#16 26. Oktober 2018 11:05

COR9
Server-Pate
Ort: Dresden
Registriert: 09. November 2010
Beiträge: 270

Re: CMSMS-1 und PHP 7

Ich würde gern TinyMCE 2.9.13 (letzte Version für CMSMS 1) unter PHP 7.2 verwenden. Mit vorinstallierten Standard-Modulen und Gallery (nachinstalliert) läuft mein CMSMS 1.12.2 schon bestens.
Nach dem FTP-Upload von TinyMCE bekomme ich auf listmodules leider die Fehlermeldung s.u. Lässt sich das leicht beheben?

Fatal error: Uncaught Error: Call to undefined method CMSModule::CMSModule() in /www/htdocs/konto/sub.domain.one/modules/TinyMCE/TinyMCE.module.php:36 Stack trace: #0 /www/htdocs/konto/sub.domain.one/lib/classes/class.moduleoperations.inc.php(545): TinyMCE->TinyMCE() #1 /www/htdocs/konto/sub.domain.one/lib/classes/class.moduleoperations.inc.php(1008): ModuleOperations->_load_module('TinyMCE', true) #2 /www/htdocs/konto/sub.domain.one/admin/listmodules.php(491): ModuleOperations->get_module_instance('TinyMCE', '', true) #3 {main} thrown in /www/htdocs/konto/sub.domain.one/modules/TinyMCE/TinyMCE.module.php on line 36

Offline

#17 27. Oktober 2018 11:15

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.188

Re: CMSMS-1 und PHP 7

Nichts leichter als das!

Ändere einfach in der betreffenden Datei "modules/TinyMCE/TinyMCE.module.php" den Namen der bemängelten Funktion

function TinyMCE() {

    parent::CMSModule();

in

function __construct() {

    parent::__construct();

Falls Dir sowas öfter passiert, merke Dir die magischen Worte "Constructor in PHP 7".
Bezogen auf CMSms und Module bedeutet das, dass alle Vorkommen der Funktion "CMSModule()" immer in "__construct()" unbenannt werden müssen. Bzw. muss man darauf achten, ob das Modul in seiner eigenen Klasse keine "__construct()"-Funktion hat, aber dafür eine Funktion enthält, die denselben Namen hat wie die Klasse. Diese muss dann in "__construct()" umbenannt werden.

Und Pickeldie schlürfte mit Frederic einen Kaffee...

Offline

#18 03. November 2018 16:50

Klenkes
Server-Pate
Ort: 89428 Syrgenstein
Registriert: 17. Dezember 2010
Beiträge: 1.394

Re: CMSMS-1 und PHP 7

Uih! Danke NaN.
Danach hatte ich noch gesucht.

Offline