Zápisník pojídačky koláčů pro Xoops - Řešení problémů s kódováním databáze v systému XOOPS
snad definitivní řešení
Jenže různá kódování tu jsou, a ještě nějakou dobu určitě budou. Takže je nutné s nimi žíti. Xoops komunikuje s databází. V drtivé většině případů je to MySQL. Do relativně nedávné doby nebylo nic složitého zálohovat a přenášet tabulky. Jenže poslední dobou to problém je. Tedy pokud se neupraví, "nehackne", část systému.
Takže pokud máte odvahu, můžeme se ponořit do hlubin Xoopsu a něco s těmi kódováními udělat. Vzhůru dolů
Nejprve je potřeba najít soubor mysqldatabase.php. Ten se nachází v adresáři CLASS / DATABASE. Ze všeho nejprve je potřeba udělat jeho zálohu. Ono je to vždy lepší. Soubor pak otevřeme v libovolném textovém editoru, který neukládá formátování. Ideální je Poznámkový blok z Windows, nebo ConTEXT či PsPad.
Když je soubor otevřený, je třeba najít tuto část:
function connect($selectdb = true)
{
if ( !extension_loaded( 'mysql' ) ) {
trigger_error( 'notrace:mysql extension not loaded', E_USER_ERROR );
return false;
}
if (XOOPS_DB_PCONNECT == 1) {
$this->conn = @mysql_pconnect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
} else {
$this->conn = @mysql_connect(XOOPS_DB_HOST, XOOPS_DB_USER, XOOPS_DB_PASS);
}
if (!$this->conn) {
$this->logger->addQuery('', $this->error(), $this->errno());
return false;
}
if($selectdb != false){
if (!mysql_select_db(XOOPS_DB_NAME)) {
$this->logger->addQuery('', $this->error(), $this->errno());
return false;
}
}
return true;
}
mysql_query('SET character_set_results="WINDOWS-1250"');
mysql_query("SET CHARACTER SET WINDOWS-1250");
mysql_query("SET NAMES 'WINDOWS-1250'");
nebo použít Xoopsí způsob přístupu k databázi:
$set = @mysql_query("SET character_set_results='WINDOWS-1250'", $this->conn);
$set = @mysql_query("SET CHARACTER SET WINDOWS-1250", $this->conn);
$set = @mysql_query("SET NAMES 'WINDOWS-1250'", $this->conn);
První způsob je funkční a bez potíží. Ten druhý používá přímo prostředků Xoopsu k přístupu k databázi. Takže je vlastně správnější. Rozhodnutí o tom nebo onom způsobu je na každém správci. Oba fungují dobře.
Místo kódování WINDOWS-1250 lze pochopitelně vložit téměř cokoli. Jen je potřeba mít všude stejnou hodnotu a také toto kódování pak používat. Žirafoviny používají právě kódování Windows 1250. Proto je i v tomto příkladě.
Tímto jednoduchým trikem se databázi řekne, jaké kódování mají data v ní uložená a všechno bude dobře fungovat. Pokud se tyto řádky nevloží, bude všechno fungovat také. Ale jen do okamžiku obnovení databáze z nějaké zálohy.
Nebo do pokusu překopírovat databázi na jiný server za účelem pokusů. Takto to mám například já doma. Na počítači běží Apache + PHP + MySQL a dělám si s Xoopsem pokusy. Když je všechno v pořádku, udělám totéž i zde. Jenže občas po pokusech je databáze nepoužitelná a proto je nutné ji obnovit.
A také chci mít oba servery stejné, pokud možno, takže z tohoto serveru udělám zálohu a vložím ji do mé databáze doma. Bez popsané úpravy je to zlá můra a skoro to není možné udělat. S touto úpravou to jde snadno (někdy...)
Napsal/a | Vlákno |
---|