Beim Update gehen Mandanteninfos verloren

Alle bestätigten Fehler in CONTENIDO 4.10 (erledigte Fehler werden durch geschlossene Beiträge gekennzeichnet).
Antworten
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Beim Update gehen Mandanteninfos verloren

Beitrag von bodil »

Guten Morgen!
Ich habe jetzt mit der neusten Version zwei Updates gemacht und habe in beiden Fällen die config.clients.php vom ursprünglichen System übernommen und ggf. angepasst. Nach dem Update fehlen im Backend aber der Server-Pfad und die Web-Adresse, in der config.clients.php stehen sie auch nicht mehr.
Im Errorlog sind ein paar Fehler aufgelaufen, die für mich aber alle danach aussehen, als seien sie eine Folge davon, dass die Übernahme der Variablen nicht klappt, erklären aber nicht, warum die Übernahme nicht klappt.

Code: Alles auswählen

PHP Warning:  Trying to access array offset on value of type null in contenido/classes/class.systemtest.php on line 658
PHP Warning:  Trying to access array offset on value of type bool in contenido/classes/class.systemtest.php on line 662
(Ich bin leider nicht ganz dahintergestiegen, was hier passiert.)
Außerdem knapp zwanzig Meldungen der Art

Code: Alles auswählen

PHP Warning:  Undefined array key "path" in contenido/includes/functions.general.php on line 581
PHP Warning:  Trying to access array offset on value of type null in contenido/includes/functions.general.php on line 581
Mit jeweils unterschiedlichen Zeilenangaben.
Außerdem viele Probleme mit cSmartyFrontend.
Wenn man nach dem Update die Daten aus der Ursprungsdatei in die neue config.clients.php einträgt, geht aber alles, ebenso wenn man die korrekten Pfade im Backend unter Administration --> Mandanten einträgt.
Der Vollständigkeit wegen: PHP 8.1 und 8.5 waren im Einsatz. Das eine ein Webserver bei Alfahosting, das andere mein Windows-Rechner.
Kann jemand das Problem bestätigen?
Grüße aus dem Eis!
bodil
Oldperl
Beiträge: 4331
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 13 Mal
Danksagung erhalten: 9 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von Oldperl »

Servus,

ich hab das mal verschoben. 8)

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Faar
Beiträge: 1964
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Hat sich bedankt: 37 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von Faar »

bodil hat geschrieben: Do 29. Jan 2026, 10:42 Guten Morgen!
Mahlzeit :)

Code: Alles auswählen

PHP Warning:  Trying to access array offset on value of type null in contenido/classes/class.systemtest.php on line 658
PHP Warning:  Trying to access array offset on value of type bool in contenido/classes/class.systemtest.php on line 662


Im Ersten ist ein Variable im Array, zum Beipsiel $name["bodil"], ein NULL, also $name = NULL statt $name[''] mit leerem Charakter. Leer ist nicht gleich NULL, wurde aber früher gerne mal gleichgesetzt und PHP 8.x ist da nicht mehr tolerant, was hier auch richtig so ist.
Im Code steht dann auch noch "The value of the PHP setting or NULL if ini_get is disabled", ohne dass auf NULL geprüft wird.
So geht das ja nun nicht.

Code: Alles auswählen

    
    protected function getPHPIniSetting($setting)
    {
        // Avoid errors if ini_get is in the disable_functions directive
        return @ini_get($setting);
    }
Man kann mit is_null() vorher prüfen, ob $setting NULL ist aber wenn die Variable bereits NULL ist, dann wäre isset() oder der Koalescence Operator ?? besser.
Man könnte es so machen:

Code: Alles auswählen

protected function getPHPIniSetting($setting)
{
    // Kurzschreibweise für einen leeren String zurückgegeben, wenn Setting false oder NULL ist
    return @ini_get($setting) ?: ''; 
}
Oder eben mit ?? ins Array irgendwas leeres zurückliefern (hier mit KI hilfe).

Code: Alles auswählen

$result = $this->getPHPIniSetting($setting);
$Value = ($result ?? [])['arraykey'] ?? 'Default';
Das ist etwas komplizierte aber mit ?? wird geschaut, ob $result existiert und falls nicht, gibts [] und einen Arrayeintrag für 'key' mit einem Deflaut wert.
Besser wäre vielleicht, Settings von vorneherein zu prüfen.
Ein ähnliches Problem hatte ich mal bei Wordpress, wo ein Wert ungeprüft ubernommen wurde, der aber im schlimmsten Fall eben NULL war.

Dieses "PHP Warning: Trying to access array offset on value of type bool in contenido/classes/class.systemtest.php on line 662" ist vermutlich ein Folgefehler vom ersteren.
Außerdem knapp zwanzig Meldungen der Art

Code: Alles auswählen

PHP Warning:  Undefined array key "path" in contenido/includes/functions.general.php on line 581
PHP Warning:  Trying to access array offset on value of type null in contenido/includes/functions.general.php on line 581
Ja nu, im Array gibts keinen Eintrag namens "path", also nix.
Das müsste man ähnlich wie oben abfangen mit z.B.:

Code: Alles auswählen

$pfad = $irgendeinArray['path'] ?? '';
Damit wird geprüft, ob es das gibt und wenn nicht, wird ein leere String '' geschrieben.
Aber ?? funktioniert nur in etwas neueren PHP Versionen, also ab PHP 7.4 ist am sichersten.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von xmurrix »

Hallo bodil,

Code: Alles auswählen

PHP Warning:  Trying to access array offset on value of type null in contenido/classes/class.systemtest.php on line 658
PHP Warning:  Trying to access array offset on value of type bool in contenido/classes/class.systemtest.php on line 662
Kann es sein, dass hier das Setup keine Dateiberechtigungen auf die von dir vom ursprünglichen System kopierten config.clients.php hat?
In class.systemtest.php Zeile 658 und 662 wird die zuvor gelesenen Dateiinformationen zu einer Datei zugegriffen.
Die Dateiinformationen sind aber nicht da, deshalb die Fehlermeldung. Hier müsste noch im Quellcode eine Prüfung rein, bevor man da zugreift.
Schau mal nach, ob bei dir die Dateiberechtigungen passen.

Code: Alles auswählen

PHP Warning:  Undefined array key "path" in contenido/includes/functions.general.php on line 581
Das hier könnte ein Folgefehler von oben sein, das müsste man sich mal genauer ansehen. An der Stelle wird das Konfigurationsarray der Mandanten aktualisiert/zusammengebaut. Anscheinend konnte deine config.clients.php nicht zuvor per include eingebunden werden.
Auch möglich, dass bei dir eine andere Umgebungsvariable CON_ENVIRONMENT oder CONTENIDO_ENVIRONMENT gesetzt ist, sodass die config.clients.php nicht korrekt eingebunden werden konnte?
...Außerdem viele Probleme mit cSmartyFrontend...
Welche Fehler, etwa welche mit unregistered functions oder deprecated modifier?
Falls ja, gibt es dazu auch ein Beitrag im Forum. Falls du in den Templates PHP-Funktionen als Smarty-Modifier nutzt, musst du diese in Smarty registrieren oder alternativen nutzen.
...Der Vollständigkeit wegen: PHP 8.1 und 8.5 waren im Einsatz...
CONTENIDO ist noch nicht auf PHP 8.5 angepasst worden, dazu gibt es ein separates GitHub-Issue PHP 8.4 support #529 und eine Branch feature/529-php-84-support, an der gearbeitet wird. Das wird es aber nicht in die 4.10.2 schaffen, dazu fehlt es an Zeit und Kapazitäten. Die Änderungen zwischen PHP 8.4 und PHP 8.5 sind nicht dramatisch, eventuell kann man danach noch die PHP 8-.5 Anpassungen nachziehen.
Daher empfehle ich den aktuellen CONTENIDO develop-Branch und die hoffentlich baldige Version 4.10.2 unter maximal PHP 8.2 laufen zu lassen.
Auch Smarty ist nicht PHP 8.4 kompatibel, das muss auch noch angepasst werden.

Was für ein Update hast du da eigentlich gemacht, von CONTENIDO 4.8 auf die aktuellste develop-Branch?

Gruß
xmurrix
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von bodil »

Hallo Faar, hallo xmurrix!
Vielen Dank für eure schnelle Reaktion!
Da der Fehler mit PHP 8.1 UND PHP 8.5 aufgetreten ist, gehe ich davon aus, dass er nichts mit der PHP-Version zu tun hat.
An einer fehlenden Dateiberechtigung kann es eigentlich auch nicht gelegen haben, denn VOR dem Update standen ja die korrekten Daten in der Datei. Nach dem Update haben sie gefehlt (d.h. sie wurden während des Updates entfernt).
Fürs Update auf dem Webserver habe ich heutemorgen eine Zip-Datei auf GitHub geholt, das Ursprungs-System basierte auf der GitHub-Version von vor ca. einem halben Jahr. Das erste Update auf meinem Windowsrechner habe ich mit der GitHub-Version vom 17.1. durchgeführt, da war die Originalversion vom Juni 2025.
Nach dem Eintragen der Mandantenpfade im Backend lief die Installation problemlos.
Der Smarty hatte vor allem Probleme, Dateien zu finden, was ich auf die fehlenden Infos in der con.clients.php zurückführen würde.
Gruß und Dank!
bodil
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von xmurrix »

Der Fehler in der contenido/classes/class.systemtest.php wurde vorhin behoben, siehe #571.

Der Ursprung muss beim Testen der Installation während des Setups liegen und die Ursache sind fehlende Dateiberechtigungen. Nun wird die Variable mit den Dateiinformationen besser geprüft.

Wie es bei dir dazu kommen kann, dass bei dir nach dem Update die Dateien fehlen, kann ich nicht sagen. Vielleicht findest du mehr Anhaltspunkte dazu in den Logdateien, eventuell auch in der Setup-Log.

Gibt es bei dir eine Installation, die vom normalen Setup abweicht, Symlinks, andere Ordnernamen, usw.?
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von bodil »

Dankeschön! Ich habe das undeutlich formuliert. Es fehlen keine Dateien. In der config.clients.php sind Daten verlorengegangen, die vor dem Update noch in der Datei standen.
xmurrix
Beiträge: 3254
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Hat sich bedankt: 14 Mal
Danksagung erhalten: 49 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von xmurrix »

Ich habe mich mal mit dem Thema "gelöschte config.clients.php" beschäftigt. Bisher konnte ich im Quellcode keine Stelle finden, in der das im Setup passieren sollte.
  1. Wenn beim Update keine "config.clients.php" existiert, wird sie aus den im Setup ermittelten Pfaden generiert.
  2. Existiert die "config.clients.php", wird sie für alle Mandanten, die in der Tabelle con_clients gefunden wurden, aktualisiert.
  3. Existiert die "config.clients.php" und sie hat aber unvollständige Daten, kann das Setup das nicht korrekt aktualisieren.
In Punkt 1. und 2. wäre es möglich, dass man bei einem Mehrmandantensystem mit unterschiedlichen Namen für die Frontend-Ordner, die Generierte "config.clients.php" eventuell manuell anpassen muss. Auch für den Fall, dass die Mandanten in der "config.clients.php" und in der Tabelle con_clients nicht identisch sind, muss man damit rechnen, dass die aktualisierte "config.clients.php" manuell anzupassen ist.

Was im Setup bei der Aktualisierung der "config.clients.php" passiert, ist folgendes:
Bei einem Update leert das Setup die globale Variable der Mandantenkonfiguration ($cfgClient) und füllt sie erneut, entweder durch das Einbinden einer vorhandenen "config.clients.php" oder durch das Übernehmen der Daten aus der Mandanten-Tabelle.
Der Inhalt des "config.clients.php" wird dann mit den Werten in der $cfgClient aktualisiert. Warum auch immer, ist bei dir hier etwas schiefgegangen.

Ich habe es mit verschiedenen Szenarien probiert, ein Update mit und ohne die "config.clients.php", mit leerer "config.clients.php" oder mit invalidem Inhalt. In keinem der Fälle konnte ich den von dir beschriebenen Fehler reproduzieren:

Code: Alles auswählen

PHP Warning:  Undefined array key "path" in contenido/includes/functions.general.php on line 581
Das Thema sollte man im Auge behalten, eine Lösung ohne die genaue Ursache wird aber schwierig.
CONTENIDO Downloads: CONTENIDO 4.10.1
CONTENIDO Links: Dokumentationsportal, FAQ, API-Dokumentation
CONTENIDO @ Github: CONTENIDO 4.10 - Mit einem Entwicklungszweig (develop-branch), das viele Verbesserungen/Optimierungen erhalten hat und auf Stabilität und Kompatibilität mit PHP 8.0 bis 8.2 getrimmt wurde.
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von bodil »

Nein. Die Datei wird nicht gelöscht.
Es verschwinden der Server-Pfad und die Webadresse aus der Datei. Vor dem Update stehen die Variablen as String in der Datei, danach steht jeweils nur noch

Code: Alles auswählen

$cfgClient[1]["images"] = "";
$cfgClient[1]["upload"] = "upload/";
$cfgClient[1]["path"]["frontend"] = "";
$cfgClient[1]["path"]["htmlpath"] = "";
$cfgClient[1]["htmlpath"]["frontend"] = "";
$cfgClient[1]["upl"]["path"] = $cfgClient[1]["path"]["frontend"] . "upload/";
$cfgClient[1]["upl"]["htmlpath"] = "";
:oops:
bodil
Beiträge: 394
Registriert: Fr 7. Okt 2011, 04:10
Hat sich bedankt: 10 Mal
Danksagung erhalten: 11 Mal
Kontaktdaten:

Re: Beim Update gehen Mandanteninfos verloren

Beitrag von bodil »

Weiterer Versuch, anderer Server: das Problem tritt nicht mehr auf. :shock:

CONTENIDO Version 4.10.2-dev (Version vom 31.1.26)
Webserver-Version Apache
Installierte PHP-Version 8.2.6
Datenbankserver-Version 5.7.25
PHP-Datenbankerweiterung mysqli
Antworten