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

#1 18. Mai 2015 13:11

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Drei auf einen Streich?

include.php schrieb:

if (!isset($DONT_LOAD_DB))
{
    debug_buffer('Initialize Database');
    cmsms()->GetDb();
    debug_buffer('Done Initializing Database');

    if (isset($CMS_ADMIN_PAGE) && !isset($CMS_LOGIN_PAGE))
    {
        $db = cmsms()->GetDb();
        $current_version = $CMS_SCHEMA_VERSION;
        $query = "SELECT version from " . cms_db_prefix() . "version";
        $current_version = $db->GetOne($query);
        if ($current_version < $CMS_SCHEMA_VERSION)
        {
            redirect($config['root_url'] . "/install/upgrade.php");
        }
    }
}

1. Ich kann nicht so richtig glauben, dass es Sinn macht, hier zwei mal eine Datenbankverbindung aufzubauen (cmsms()->GetDb()) - wird ja eh nur 1x die Version in der Datenbank abgefragt.

2. Dann scheint mir diese Zeile zu viel zu sein

$current_version = $CMS_SCHEMA_VERSION;

denn 2 Zeilen später wird der Wert von $current_version ja von dem Wert aus der Datenbankabfrage überschrieben.

3. Und last but not least kann dies

if ($current_version < $CMS_SCHEMA_VERSION)
{
	redirect($config['root_url'] . "/install/upgrade.php");
}

durchaus in die Hose gehen - nämlich genau dann, wenn /install/upgrade.php nicht vorhanden ist. Da wird ins Nichts weitergeleitet.

Da erscheint mir dies sinnvoller

if ($current_version < $CMS_SCHEMA_VERSION && is_file($config['root_url'] . "/install/upgrade.php"))
{
	redirect($config['root_url'] . "/install/upgrade.php");
}

Oder sehe ich schon Gespenster?

Offline

#2 18. Mai 2015 14:32

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

Re: Drei auf einen Streich?

So weit ich das erkennen kann, wird mit GetDb() nicht jedesmal eine neue Datenbankverbindung hergestellt. Lediglich beim ersten Aufruf wird eine Verbindung hergestellt und ein Datenbank-Objekt zurückgegeben. Dieses wird nach dem ersten Aufruf in einer Variable zwischengespeichert. Bei weiteren Aufrufen wird lediglich eine Referenz auf dieses Datenbank-Objekt zurückgegeben.

Abgesehen davon ... ja, theoretisch könnte das in die Hose gehen. Aber wenn man bedenkt, dass die beiden Versionen (die in der DB und die in der version.php) nur dann in der Form abweichen können, wenn man neuere Dateien auf den Server geladen hat, wodurch - wenn sowohl Entwickler als auch Anwender alles korrekt gemacht haben - automatich immer eine "/install/upgrade.php" existieren dürfte, dann finde ich das eher trivial.

Ändert aber nichts daran, dass der Kuddelmuddel auch einfacher geht. Vor allem wenn man bedenkt, dass im Code schon eine gefühlte Ewigkeit drin steht, dass genau dieser Passus "später mal" entfernt werden soll.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 18. Mai 2015 15:03

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Drei auf einen Streich?

NaN schrieb:

Abgesehen davon ... ja, theoretisch könnte das in die Hose gehen. ... dann finde ich das eher trivial.

Sicherlich, ist aber insgesamt inkonsistent wink - da wird auf Teufel komm raus auf PHP-Funktionen und -Versionen geprüft, die schon lange Standard sind ...

NaN schrieb:

Vor allem wenn man bedenkt, dass im Code schon eine gefühlte Ewigkeit drin steht, dass genau dieser Passus "später mal" entfernt werden soll.

Das Problem dürfte sein, dass es nur im Code und maximal noch auf einer (vergilbten) Haftnotiz des notierenden Entwicklers steht, der vermutlich schon gar nicht mehr an Bord ist. Andere Projekte verwenden dafür ein funktionierendes Ticketsystem ...

Offline