Fehlerliste CPO+4.0 unter PHP 8.1

Hier bitte Probleme zu ConPressoPlus melden. Hier werden Ursachen und Lösungsvorschläge diskutiert.
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Fehlerliste CPO+4.0 unter PHP 8.1

Beitrag von MarkusR »

:mrgreen: = behoben in CPO+4.0a (wird im November publiziert)
:gruebel: = Problem erkannt, Lösung suchen
:wall: = keine Lösung verfügbar, da Problem nicht erkennbar

Es hat sich gezeigt, dass Tests in realen, produktiven Systemen andere Fehler zutage fördern, als in der Entwicklung.
Die strikten Prüfungen von PHP 8.1 decken nun einges auf, was im nächsten Update beseitigt werden sollte.

Undefined array key 2 in _include/printnavigation.inc.php on line 105 -> Lösung :mrgreen:
Undefined variable $cpoSystem in _include/parser_r_url.inc.php on line 69 -> Lösung :mrgreen:
Undefined variable $content in _editor/editor.php on line 482 -> Lösung :mrgreen:
Undefined variable $pagereplacer in mod_functions/post_parse_functions.inc.php on line 85 -> Lösung :mrgreen:
Undefined array key "SID_user" in mod_copy_rights/common-module.inc.php on line 67 -> Lösung :mrgreen:
viewtopic.php?p=29495#p29495 :mrgreen:
Undefined array key "caption" in _admin/modules.php on line 51 -> Lösung :mrgreen:

Fatal error: 'break' not in the 'loop' or 'switch' context in _data/index.php on line 136' -> Zeile auskommentieren! :mrgreen:

_admin/manage_placeholders.php -> Auswahl, Platzierung ohne Funktion + Icons-margin -> siehe Testsite :mrgreen:

Undefined array key "l" in _admin/frame_navigation.php on line 59 :mrgreen: (nur beim Setup!)

------

bei Navigation mit gelöschter(!) Rubrik:
Undefined array key (nr) in _include/function.php on line 616
Trying to access array offset on value of type null in _views/navigation_list.inc.php on line 235
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 136
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 171
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 178
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 275
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 282
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 291
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 298
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 189
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 213
Trying to access array offset on value of type null in _views/rubrics_list.inc.php on line 304
==> :mrgreen:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Fehlerliste CPO+4.0a unter PHP 8.1 "All Saints"

Beitrag von MarkusR »

:mrgreen: = behoben in CPO+4.0b (wird am ??? publiziert)
:gruebel: = Problem erkannt, Lösung suchen
:wall: = keine Lösung verfügbar, da Problem nicht erkennbar

Trotz 1:1 Kopie zeigte sich ein unerwartetes Verhalten, da die Navigation eines größeren Webauftrittes durcheinandergewürfelt wurde. Viele Experimente, kein Erfolg.
Nach langem Suche fiel mir die eine Abfrage auf, die die Navigation mittels der Funktion getNavigation() ausliest, und zwar in korrekter Sortierung.... eigentlich.
Darin fiel mir das GROUP BY Statement auf und ich erinnerte mich daran, dass ich schon mal beobachtet habe, dass GROUP nicht automatisch auch eine Sortierung bewirkt, auch wenn ich das eigentlich mal so gelernt habe,

Also wird

Code: Alles auswählen

    $query = 'SELECT n.id, n.l, n.r, n.caption, n.rubric_id, n.settings, COUNT(*)-1 AS level, FLOOR((n.r-n.l)/2) AS childs '
            .'FROM '.CPO_NAVTREE.' AS n, '.CPO_NAVTREE.' AS o '
            .'WHERE n.l BETWEEN o.l AND o.r '
            .'GROUP BY n.l';
zu

Code: Alles auswählen

    $query = 'SELECT n.id, n.l, n.r, n.caption, n.rubric_id, n.settings, COUNT(*)-1 AS level, FLOOR((n.r-n.l)/2) AS childs '
            .'FROM '.CPO_NAVTREE.' AS n, '.CPO_NAVTREE.' AS o '
            .'WHERE n.l BETWEEN o.l AND o.r '
            .'GROUP BY n.l '
            .'ORDER BY n.l';
:mrgreen:
----------------------------------------------------------------
Undefined array key "linktype" in _include/parser_r_url.inc.php on line 30 :mrgreen:

Folgendes betrifft den Mailversand mittels mail() und betrifft primär Module:
Ewige Fehlersuche offenbarte, dass in PHP 8.1 "additional_headers" bei der Übergabe als Textfolge massive Probleme bereitet.
Erst durch die Nutzung eines Arrays verschwinden diese, was erst seit PHP 7.2 akzeptiert wird.

Auch die Funktion mb_encode_mimeheader() codiert leider nicht so, wie mail() es in PHP 8.1 erwartet!
Statt =?iso-8859-1?Q?Markus_R=F6sel?= wird Markus =?iso-8859-1?Q?R=F6sel?= erzeugt, was aber nicht mehr akzeptiert wird. Also entweder ganz oder gar nicht codiert!

in mod_search muss
BASE_ABS.SKIN_URL.'pic_settings.gif',
geändert werden zu
SKIN_URL.'pic_settings.gif',
für Webauftritte, wo CPO nicht im root liegt.
----
DIR/member.php benötigt ggf. mehr Prüfungen!
Vermutlich resultieren die auftretenden Fehler aber aus Hacker-Angriffen mit manipulierter URL!

Code: Alles auswählen

// header and footer mechanism
if ($cpoRubricSettings['pagetemplate_' . $pagetype]==0) {
    ob_start(); // member.inc.php might redirect
    include(CPO_BASEDIR.$directory.'/loadheaders.php');
    require CPO_BASEDIR . '_include/member.inc.php';
    include(CPO_BASEDIR.$directory.'/loadfooters.php');
    ob_end_flush();
    exit;
}
wird zu

Code: Alles auswählen

// header and footer mechanism
if ($cpoRubricSettings['pagetemplate_' . $pagetype]==0) {
    $loadheaders = CPO_BASEDIR.$directory.'/loadheaders.php';
    $loadfooters = CPO_BASEDIR.$directory.'/loadfooters.php';
    $memberInc   = CPO_BASEDIR . '_include/member.inc.php';
    ob_start(); // member.inc.php might redirect
    if (file_exists($loadheaders) && is_readable($loadheaders)) include($loadheaders);
    if (file_exists($memberInc)   && is_readable($memberInc))   require $memberInc;
    if (file_exists($loadfooters) && is_readable($loadfooters)) include($loadfooters);
    ob_end_flush();
    exit;
}
-------------------------
_include/user_permission.php
if ($statusall[$i]=='1') { => if (isset($statusall[$i]) && $statusall[$i]=='1') { :mrgreen:
-------------------------
Undefined variable $pager in _admin/articles.php on line 1046 (bei Nutzung des Artikelfilters) :mrgreen:
-------------------------
bigdump akualisieren! :mrgreen:
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Fehlerliste CPO+4.0b "Bad Boys" unter PHP 8.2

Beitrag von MarkusR »

Kein spezielles CPO+ Problem sondern ein neues Verhalten von str_split() unter PHP 8.2, das gegenüber PHP 8.1 bei str_split('') ein leeres Array liefert, davor ein Array mit einem leeren Eintrag. Das führt bei Logeinträgen ohne Kommentar dazu, dass kein Logeintrag angelegt wird.

In _include/function.php muss

Code: Alles auswählen

    foreach ($comments as $comment) {
        $db->query('INSERT INTO '.CPO_LOG.' (user, datum, aktion, bemerkung) '
                  .'VALUES ('
                  ."'" . addslashes($login) . "', "
                  ."'" . $date . "', "
                  ."'" . addslashes($action) . (count($comments)>1 ? ' (' . $i++ . '/' . count($comments) . ')': '') . "', "
                  ."'" . addslashes($comment) . "') ");
    }
geändert werden zu

Code: Alles auswählen

    if (count($comments)==0)  { // Workaround for PHP 8.2 for str_split on empty comment
        $db->query('INSERT INTO '.CPO_LOG.' (user, datum, aktion, bemerkung) '
                  .'VALUES ('
                  ."'" . addslashes($login) . "', "
                  ."'" . $date . "', "
                  ."'" . addslashes($action) . "', "
                  ."'" . addslashes($comment) . "') ");
    } else {
        foreach ($comments as $comment) {
            $db->query('INSERT INTO '.CPO_LOG.' (user, datum, aktion, bemerkung) '
                      .'VALUES ('
                      ."'" . addslashes($login) . "', "
                      ."'" . $date . "', "
                      ."'" . addslashes($action) . (count($comments)>1 ? ' (' . $i++ . '/' . count($comments) . ')': '') . "', "
                      ."'" . addslashes($comment) . "') ");
        }
    }
Man könnte auch einen leeren Kommentar mit einem Leerzeichen füllen, das würde aber bei Datenbanksuchen zu falschen Ergebnissen führen, daher der "lange" Weg.

==================================

Auch kein neues und kein CPO+ Problem, aber eben jetzt erst aufgefallen

In mod_search/_includes/actions.inc.php muss

Code: Alles auswählen

        // search images {{{
        $query = 'SELECT beschreibung, alttext, type, datei, format, artikel_archiv, freigabe, nr, titel, autor, pub_datum, '.CPO_NEWS.'.rubric_id, templates_id, verfallsdatum, seclevel, '.CPO_NEWS.'.changer, last_modify'.$perm_stufe4.' FROM '.CPO_CONTENT_IMAGES.', '.CPO_DATA.', '.CPO_NEWS.', '.CPO_RUBRIC.$perm_table.' '
geändert werden zu

Code: Alles auswählen

        // search images {{{
        $query = 'SELECT fieldname, beschreibung, alttext, type, datei, format, artikel_archiv, freigabe, nr, titel, autor, pub_datum, '.CPO_NEWS.'.rubric_id, templates_id, verfallsdatum, seclevel, '.CPO_NEWS.'.changer, last_modify'.$perm_stufe4.' FROM '.CPO_CONTENT_IMAGES.', '.CPO_DATA.', '.CPO_NEWS.', '.CPO_RUBRIC.$perm_table.' '
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7379
Registriert: 01.01.1970 02:00
Hat sich bedankt: 114 Mal
Danksagung erhalten: 938 Mal

Re: Fehlerliste CPO+4.0 unter PHP 8.1

Beitrag von MarkusR »

PHP Warning: Undefined array key "nr" in _include/member.inc.php on line 376
Wozu ist da eigentlich die nr?
=> Ist eine custom-Anpassung!
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle