Page 1 of 1

GXLink unter PHP 7.2

Posted: Thu Aug 01, 2019 7:10 pm
by Berni
Auf meinem Webspace muss ich ab sofort mit PHP 7.2 klar kommen.
Leider läuft GXLink jetzt nicht mehr, es hagelt Fehlermeldungen.

Gibt es eine Chance das PLUGIN wieder zum Laufen zu bringen?

Ach ja, dieser Bug besteht im übrigen wohl auch immer noch :
viewtopic.php?f=16&t=12777&hilit=Gxlink
Nur für den Fall, dass der Entwickler hier mitliest :)

Re: GXLink unter PHP 7.2

Posted: Fri Aug 02, 2019 8:52 am
by johnjdoe
Berni wrote:
Thu Aug 01, 2019 7:10 pm
Auf meinem Webspace muss ich ab sofort mit PHP 7.2 klar kommen.
Leider läuft GXLink jetzt nicht mehr, es hagelt Fehlermeldungen.
Gibt es eine Chance das PLUGIN wieder zum Laufen zu bringen?
Ich habe leider total wenig Zeit und hoffe, dass vielleicht einer der anderen Entwickler die Möglichkeit hat, mal einen Blick darauf zu werfen... :roll:
Berni wrote:
Thu Aug 01, 2019 7:10 pm
Ach ja, dieser Bug besteht im übrigen wohl auch immer noch :
viewtopic.php?f=16&t=12777&hilit=Gxlink
Nur für den Fall, dass der Entwickler hier mitliest :)
Das habe ich angepasst und in eine Version 1.6 auf meinem Webspace untergebracht: https://xtc.xhonneux.com/?Projekte/GXLink/Download

Müsste im Idealfall noch auf https://github.com/cmsimple-xh/gxlink . Bin in den letzten Stunden vor dem dringend benötigten Urlaub und krieg das vorher nicht hin.

Re: GXLink unter PHP 7.2

Posted: Sat Aug 03, 2019 3:59 pm
by lck
Berni wrote:
Thu Aug 01, 2019 7:10 pm
Auf meinem Webspace muss ich ab sofort mit PHP 7.2 klar kommen.
Leider läuft GXLink jetzt nicht mehr, es hagelt Fehlermeldungen.
Ich habe das mit der Masterversion von Christoph getestet mit PHP 7.1.1, 7.2.0 und 7.3.6. Unter 7.1.1 funktioniert GXLink, unter den anderern Versionen hagelt es tatsächlich seitenweise PHP-Fehlermeldungen in einer weißen Seite:
Php-Txt-Db-Access Error:
PHP Error: [2] count(): Parameter must be an array or an object that implements Countable [Line: 167] [File: D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\txt-db-api\resultset.php]
...
Php-Txt-Db-Access Error:
Query 'SELECT * FROM countries WHERE iso="DE"' failed
Uncaught Error: Call to a member function next() on bool in D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\index.php:302
Stack trace:
#0 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248) : eval()'d code(1): GXLink()
#1 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248): eval()
#2 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(208): XH_evaluateSinglePluginCall('gxlink()')
#3 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(305): evaluate_plugincall('
johnjdoe wrote:
Fri Aug 02, 2019 8:52 am
Ich habe leider total wenig Zeit und hoffe, dass vielleicht einer der anderen Entwickler die Möglichkeit hat, mal einen Blick darauf zu werfen...
Ich habe mir das mal angeschaut (als Nicht-Entwickler) und durch suchen bin ich auf folgenden Fix gekommen.
gxlink/txt-db-api/resultset.php Zeile 167, ändern von

Code: Select all

for($i=0;$i<count($this->colTypes);++$i) {
zu

Code: Select all

for($i=0;$i<count((array)$this->colTypes);++$i) {
Scheint zu funktionieren, zumindest bei mir. Der Fix von weiter oben müsste dann halt auch noch eingebaut werden.

Re: GXLink unter PHP 7.2

Posted: Sat Aug 03, 2019 8:45 pm
by Berni
@lck, man sollte Dir einen Orden verleihen! :P

Funzt erst einmal - Fehler ist (bei mir) verschwunden!

Re: GXLink unter PHP 7.2

Posted: Sat Aug 10, 2019 12:32 pm
by cmb
lck wrote:
Sat Aug 03, 2019 3:59 pm
Ich habe mir das mal angeschaut (als Nicht-Entwickler) und durch suchen bin ich auf folgenden Fix gekommen.
gxlink/txt-db-api/resultset.php Zeile 167, ändern von

Code: Select all

for($i=0;$i<count($this->colTypes);++$i) {
zu

Code: Select all

for($i=0;$i<count((array)$this->colTypes);++$i) {
Fürs erste recht brauchbar. Danke Ludwig! Allerdings handelt es sich hierbei nur um einen Workaround, der ein Fehlverhalten der txt-db-api verschleiert. Das Problem ist, dass $this->colTypes eigentlich immer ein Array sein sollte, es durch schludrige Programmierung in Verbindung mit einer countries.txt, die Leerzeilen enthält, wo das nicht erwartet wird, aber nicht ist (in diesem Fall ist $rec FALSE, und somit werden die ::colTypes FALSE, was eben kein Array ist. Löscht man Zeile 2 in countries.txt, dann sollte auch ohne Ludwigs Fix erst mal alles funktionieren.

Natürlich sollte der Code nicht so bleiben, aber eigentlich halte ich txt-db-api für längst obsolet, und ein sauberer Fix bezüglich dem Überspringen solcher Leerzeilen ist mir persönlich zu viel Arbeit. Zeitgemäßer Code (möglich von PHP 5.1 an) würde wohl den Parametertypen von $colTypes deklarieren, also diese Zeile ändern zu:

Code: Select all

function setColumnTypes(array $colTypes) {
Das würde zwar nicht magisch das Problem mit der Leerzeile beheben, aber zumindest würde ein Fehler angezeigt, wenn das Problem auftritt, und nicht erst irgendwann später:
PHP Fatal error: Uncaught TypeError: Argument 1 passed to ResultSet::setColumnTypes() must be of the type array, bool given, called in D:\Users\cmb\wwwroot\cmsimplexh\plugins\gxlink\txt-db-api\resultset.php on line 1643 and defined in D:\Users\cmb\wwwroot\cmsimplexh\plugins\gxlink\txt-db-api\resultset.php:322
Damit kann man auch ohne Debugger schon deutlich mehr anfangen. Will sagen: nutzt die neueren Möglichkeiten, die PHP bietet; viele davon sind sehr hilfreich.

Und noch ein Vorschlag, um die Arbeit mit txt-db-api unter CMSimple_XH zu vereinfachen: schmeißt die Fehlerbehandlung in database.php raus (eine Zeile mit set_error_handler() und drei mit restore_error_handler()). Dann wäre nämlich auch ohne weitere Fixes das Verhalten unter 7.2 gleich wie unter 7.1 (nur gäbe es noch einen Warnhinweis bzgl. count()).

Re: GXLink unter PHP 7.2

Posted: Sat Aug 10, 2019 6:43 pm
by lck
So geht's auch :) , danke Christoph! Funktioniert aber nur, wenn ich alle 3 Fixes einarbeite.
Wenn ich nur Zeile 2 in countries.txt lösche, so bleibt immer noch (Debug-Mode ist aktiviert):
Php-Txt-Db-Access Error:
PHP Error: [2] A non-numeric value encountered [Line: 173] [File: D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\txt-db-api\resultset.php]

Php-Txt-Db-Access Error:
Query 'SELECT * FROM countries WHERE iso="US"' failed
Uncaught Error: Call to a member function next() on boolean in D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\index.php:302
Stack trace:
#0 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248) : eval()'d code(1): GXLink()
#1 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248): eval()
#2 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(208): XH_evaluateSinglePluginCall('gxlink()')
#3 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(305): evaluate_plugincall('
Nach den 3 Fixes meldet der Debug-Mode aber immer noch beim Aufruf der Seite die Gxlink enhält:
WARNING: A non-numeric value encountered
D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\txt-db-api\resultset.php:173

und bei Plugins > Gxlink > Einstellungen:
DEPRECATED: The each() function is deprecated. This message will be suppressed on further calls
D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\admin.php:170

Re: GXLink unter PHP 7.2

Posted: Tue Aug 27, 2019 7:37 am
by johnjdoe
lck wrote:
Sat Aug 03, 2019 3:59 pm
Berni wrote:
Thu Aug 01, 2019 7:10 pm
Auf meinem Webspace muss ich ab sofort mit PHP 7.2 klar kommen.
Leider läuft GXLink jetzt nicht mehr, es hagelt Fehlermeldungen.
Ich habe das mit der Masterversion von Christoph getestet mit PHP 7.1.1, 7.2.0 und 7.3.6. Unter 7.1.1 funktioniert GXLink, unter den anderern Versionen hagelt es tatsächlich seitenweise PHP-Fehlermeldungen in einer weißen Seite:
Php-Txt-Db-Access Error:
PHP Error: [2] count(): Parameter must be an array or an object that implements Countable [Line: 167] [File: D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\txt-db-api\resultset.php]
...
Php-Txt-Db-Access Error:
Query 'SELECT * FROM countries WHERE iso="DE"' failed
Uncaught Error: Call to a member function next() on bool in D:\xampp\htdocs\cmsimplexh172\plugins\gxlink\index.php:302
Stack trace:
#0 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248) : eval()'d code(1): GXLink()
#1 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(248): eval()
#2 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(208): XH_evaluateSinglePluginCall('gxlink()')
#3 D:\xampp\htdocs\cmsimplexh172\cmsimple\functions.php(305): evaluate_plugincall('
johnjdoe wrote:
Fri Aug 02, 2019 8:52 am
Ich habe leider total wenig Zeit und hoffe, dass vielleicht einer der anderen Entwickler die Möglichkeit hat, mal einen Blick darauf zu werfen...
Ich habe mir das mal angeschaut (als Nicht-Entwickler) und durch suchen bin ich auf folgenden Fix gekommen.
gxlink/txt-db-api/resultset.php Zeile 167, ändern von

Code: Select all

for($i=0;$i<count($this->colTypes);++$i) {
zu

Code: Select all

for($i=0;$i<count((array)$this->colTypes);++$i) {
Scheint zu funktionieren, zumindest bei mir. Der Fix von weiter oben müsste dann halt auch noch eingebaut werden.
Vielen Dank für die Arbeit!

Ich habe das schnell angepasst und in eine Version 1.7 auf meinem Webspace untergebracht: https://xtc.xhonneux.com/?Projekte/GXLink/Download

So gibt es wenigstens eine downloadbare Version, die funktioniert (bis vielleicht irgendwann mal eine neuere/bessere kommt, die auch den wertvollen Anmerkungen von Christoph Rechnung trägt).

Müsste im Idealfall noch auf https://github.com/cmsimple-xh/gxlink .