Pagina 1 van 1

Binary Tree maken

Geplaatst: 07 feb 2010, 15:46
door David
Derky schreef:Het lijkt erop dat je Binary Tree dood is. :)
Wat dat is? Deze 'boom' houd bij in welke volgorde de forums staan en welke subforums van elkaar zijn.

Hoe lossen we dit op?
Maak eerst een back-up van je database.
Maak een bestand genaamd rebuild_tree.php aan en zet daarin het onderstaande. Voer daarna dit bestand uit en het moet weer werken. De forums zullen nu wel door de war staan maar dit was dus al zo, alleen zag je het niet. ;)

Code: Selecteer alles

<?php

define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);


// Start session management
$user->session_begin();
$auth->acl($user->data);

/*
 Recalculate Binary Tree */

function recalc_btree($sql_id, $sql_table, $module_class = '')
{
    global $db;

    if (!$sql_id || !$sql_table)
    {
        return;
    }

    $sql_where = ($module_class) ? " WHERE module_class = '" . $db->sql_escape($module_class) . "'" : '';

    // Reset to minimum possible left and right id
    $sql = "SELECT MIN(left_id) as min_left_id, MIN(right_id) as min_right_id
        FROM $sql_table
        $sql_where";
    $result = $db->sql_query($sql);
    $row = $db->sql_fetchrow($result);
    $db->sql_freeresult($result);

    $substract = (int) (min($row['min_left_id'], $row['min_right_id']) - 1);

    if ($substract > 0)
    {
        $sql = "UPDATE $sql_table
            SET left_id = left_id - $substract, right_id = right_id - $substract
            $sql_where";
        $db->sql_query($sql);
    }

    $sql = "SELECT $sql_id, parent_id, left_id, right_id
        FROM $sql_table
        $sql_where
        ORDER BY left_id ASC, parent_id ASC, $sql_id ASC";
    $f_result = $db->sql_query($sql);

    while ($item_data = $db->sql_fetchrow($f_result))
    {
        if ($item_data['parent_id'])
        {
            $sql = "SELECT left_id, right_id
                FROM $sql_table
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    $sql_id = {$item_data['parent_id']}";
            $result = $db->sql_query($sql);

            if (!$row = $db->sql_fetchrow($result))
            {
                $sql = "UPDATE $sql_table SET parent_id = 0 WHERE $sql_id = " . $item_data[$sql_id];
                $db->sql_query($sql);
            }
            $db->sql_freeresult($result);

            $sql = "UPDATE $sql_table
                SET left_id = left_id + 2, right_id = right_id + 2
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    left_id > {$row['right_id']}";
            $db->sql_query($sql);

            $sql = "UPDATE $sql_table
                SET right_id = right_id + 2
                $sql_where " . (($sql_where) ? 'AND' : 'WHERE') . "
                    {$row['left_id']} BETWEEN left_id AND right_id";
            $db->sql_query($sql);

            $item_data['left_id'] = $row['right_id'];
            $item_data['right_id'] = $row['right_id'] + 1;
        }
        else
        {
            $sql = "SELECT MAX(right_id) AS right_id
                FROM $sql_table
                $sql_where";
            $result = $db->sql_query($sql);
            $row = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);

            $item_data['left_id'] = $row['right_id'] + 1;
            $item_data['right_id'] = $row['right_id'] + 2;
        }
    
        $sql = "UPDATE $sql_table
            SET left_id = {$item_data['left_id']}, right_id = {$item_data['right_id']}
            WHERE $sql_id = " . $item_data[$sql_id];
        $db->sql_query($sql);
    }
    $db->sql_freeresult($f_result);
}

recalc_btree('forum_id', FORUMS_TABLE);

trigger_error("klaar!");

?>
Ik moet de binary tree gaan herstellen, ik ben naar dit bericht door verwezen. Hoe moet ik dit bestand precies uitvoeren? En waar moet ik het neerzetten? Hoe ga ik te werk?

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 16:21
door Paul
Je moet de instructies die derky aangaf volgen? Dan wordt de tree hersteld.

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 16:26
door David
Maar dat bestand, dat moet in in de root van me forum zetten neem ik aan? En dan in me webbrowser naar dat bestand toe gaan? En dan gaat de rest van zelf toch?

De tabellen heten phpbb3_ dus moet ik de phpbb_ aanpassen toch?

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 16:39
door Paul
David schreef:Maar dat bestand, dat moet in in de root van me forum zetten neem ik aan? En dan in me webbrowser naar dat bestand toe gaan? En dan gaat de rest van zelf toch?
Het al geprobeerd? Je hebt toch een backup, dus als het fout gaan kan je hem zo terug zetten.
De tabellen heten phpbb3_ dus moet ik de phpbb_ aanpassen toch?
Nee.

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 17:13
door EelkeB
Ter verduidelijking, welke phpbb_ had je willen veranderen? Er is er niet 1 die in een SQL-query voorkomt als prefix van de tabelnaam, want dat is allemaal netjes geregeld door het includen van common.php en het gebruik van de constante FORUMS_TABLE voor de tabel-naam.

Overigens, als je met zoveel vragen zit, zorg dan gewoon voor een lokale testomgeving waar je dit kunt uitproberen zonder direct schade te veroorzaken als het mis gaat. M.a.w., don't take our word for it, maar zorg gewoon voor je eigen zekerheid :) (Paul's tip om een backup te maken en het gewoon te proberen valt ook onder die categorie).

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 17:24
door David
Ik ben inmiddels bezig een test locatie te maken, om dit te doen ;) Alleen is het niet mijn website. Dus ik wil wel voorzichtig zijn en zeker zijn met wat ik doe, alleen de backup die ik heb is niet goed. Ik wilde deze op de test database zetten en kreeg de volgende melding:(

Code: Selecteer alles

Fout

Er schijnt een fout te zijn in uw SQL query. Mocht de MySQL server een error hebben terug gegeven, probeer dan of uw hiermee uw fout kunt oplossen.

ERROR: Onbekende Punctuatie String @ 5
STR: />
SQL: <br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocate 84148630 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />


SQL-query:

<br /> <b>Fatal error</b>: Out of memory (allocated 87556096) (tried to allocate 84148630 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />

MySQL retourneerde: Documentatie
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocat' at line 1 

Re: Binary Tree maken

Geplaatst: 07 feb 2010, 17:30
door EelkeB
Kijk, ook zoiets. Wel handig om je *backup* te testen voor je rare dingen gaat doen :)

Het lijkt erop dat het backup-script tegen de geheugenlimiet van PHP is aangelopen bij het maken van de backup (voor de zekerheid, open eens de backup in een tekst-editor, komt die tekst uit de dump?). Je kunt proberen om de geheugenlimiet te verhogen, hoewel hij al redelijk hoog lijkt te staan (er zijn bijna 90 MB gealloceerd als het mis gaat). Misschien even kijken naar de opties die je gebruikt bij het maken van de backup. Andere mogelijkheid is om de dump in delen te maken.

Re: Binary Tree maken

Geplaatst: 08 feb 2010, 22:53
door David
Ik weet niet wat het is :cry: Maar ik heb de back-up in delen gemaakt.... En heb zelf geprobeerd ze 1 voor 1 te maken. Maar alleen de eerste 28 tabellen krijg ik een goede back-up van de daar op volgende tabellen geven nog steeds de zelfde melding...

Onderstaande tekst staat er, als de foute back-up in notepad open!

Code: Selecteer alles

<br />
<b>Fatal error</b>:  Out of memory (allocated 87556096) (tried to allocate 84148277 bytes) in <b>/usr/local/cpanel/base/3rdparty/phpMyAdmin/export.php</b> on line <b>133</b><br />
Dat bestand kan ik op zich wel vinden, maar om daar nou in te gaan klooien zie ik niet zitten!

Er wordt contact gezocht met de host maar die is beperkt door dat die op vakantie is...

Kan ik zelf instellingen veranderen? zodat als nog back-up kan maken...

Re: Binary Tree maken

Geplaatst: 09 feb 2010, 04:41
door headout
David schreef:Er wordt contact gezocht met de host maar die is beperkt door dat die op vakantie is...
Euhm, je bedoelt: die is ook wel eens 's weekends vrij. Wat hij/zij in het weekend uitvoert, is dan zijn/haar zaak :)
Houd jullie persoonlijke zaken buiten dit forum graag. En nu weer ontopic.
- Jim
Tip: maak eens een backup met phpMyAdmin. Of benader eens rechtstreeks de hoster. Die is best bereid om een kopietje te maken van de database en deze op een nieuwe database te importeren.

Re: Binary Tree maken

Geplaatst: 09 feb 2010, 09:05
door EelkeB
Uit de foutmelding blijkt dat hij al phpMyAdmin gebruikt...

Re: Binary Tree maken

Geplaatst: 09 feb 2010, 15:28
door headout
EelkeB schreef:Uit de foutmelding blijkt dat hij al phpMyAdmin gebruikt...
Ik kan gelukkig foutmeldingen lezen ;)

Maar hoe hij phpMyAdmin gebruikt, op zijn kop, of via New York of met behulp van een handstand: hier kon ik zonder enig probleem een backupje maken via phpMyAdmin. Ik heb hem inmiddels al geinstrueerd (voordat er weet opmerkingen komen dat er enkel commentaar van mijn kant komt :))

Re: Binary Tree maken

Geplaatst: 09 feb 2010, 19:21
door David
Ik heb de rebuild_tree.php uitgevoerd, de onderdelen lijken goed te staan, Ik kwam alleen onderstaand tegen... Dit hoort volgens mij niet zoo! Kan ik hier iets aan doen?

http://www.berner4life.com/Voorbeeldje.jpg

Ik heb de Cache en beheerder buffer geleegd, maar dat had geen zin!

_____________________________________________________________________

Het is al weg... Was even met iets bezig, en zie nu dat het opeens weg is!!