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()).