PDA

Zobacz pełną wersję : Przeniesienie Joomli na nowy serwer - krzaki



Amfidiusz
21-07-2009, 21:19
Witam!

Przeniosłem ostatnio swoją Joomlę na nowy serwer. Niestety, zamiast polskich znaków pojawiły się krzaki. Czy jest możliwe ich naprawienie? Mam jeszcze dostęp do starego serwera, więc mogę wykonać wszystko ponownie, już w prawidłowy sposób - o ile mi napiszecie, jaki on jest :)

Baza jest kodowana w latin2. I jako taka byłą wgrywana.
Jak to wygląda możecie zobaczyć na http://maxenglish.edu.pl

zwiastun
21-07-2009, 21:34
Jakieś info o nowej bazie danych?

Amfidiusz
21-07-2009, 21:43
Hmm.. Wybacz, nie jestem specem w tej dziedzinie. Jakich info potrzebujesz?
Kodowanie: latin2_general_ci
W bazie nie ma polskich znaków: Zakończenie Roku
Więc pewnie trzeba będzie ją ponownie wgrać - tylko w jaki sposób?

zwiastun
21-07-2009, 22:52
W phpMyAdmin masz informację o kodowaniu bazy danych oraz metodzie porównywania napisów

Amfidiusz
22-07-2009, 06:38
W phpMyAdmin masz informację o kodowaniu bazy danych
Wiem, podałem powyżej.

oraz metodzie porównywania napisówA tego nie umiem znaleźć...

----------EDIT-----------

Za dużo nie pomogłeś, ale dzięki chociaż za zainteresowanie tematem. Nie mogę dłużej czekać i liczyć na to, że ktoś mi wytłumaczy, jak przenieść poprawnie bazę. Zaczynam zmieniać wpisy ręcznie - mam nadzieję, że w kilka godzin się wyrobię.

Temat do zamknięcia.

zwiastun
22-07-2009, 12:04
Bez sensu! Ręczna zmiana bez wiedzy o przyczynie problemu zaowocuje co najwyżej jeszcze większym bałaganem.
Pomóc to musisz sobie przede wszystkim sam. Informacja o kodowaniu znaków i informacja o metodzie porównywania napisów to dwie z podstawowych, jakie są potrzebne, żeby cokolwiek orzekać. I skoro się szuka porady w kwestii problemów z kodowaniem, to wypadałoby takie informacje podać od razu, a nie dopiero po wypytaniu o nie i na dodatek opatrywać to komentarzem, że nie otrzymałeś zbyt wielkiej pomocy (na szczęście, nie jest to komentarz nieżyczliwy:) ).
W każdej tabeli - gdy w phpMyAdminie przeglądasz ich strukturę - masz kolumnę "metoda porównywania napisów".
Informacje o kodowaniu powinieneś podać zarówno w odniesieniu do jednej, jak i do drugiej bazy (starej i nowej).
Ponadto:
- brak informacji o samym Joomla! (wydanie, skąd pobrane)
- bak informacji, czy i jakie - opisane - sposoby rozwiązania problemów z kodowaniem stosowałeś (np. zdefiniowanie kodowania w pliku database.php)

hazael
22-07-2009, 14:13
Zwiastun napisał:
W każdej tabeli - gdy w phpMyAdminie przeglądasz ich strukturę - masz kolumnę "metoda porównywania napisów".Metoda porównywania napisów oraz jej zmiana zupełnie nic nie daje przy zmianie kodowania znaków. Jak sama nazwa mówi - słuzy jedynie do porównywania. Dokładniej skrypt przy zapytaniu do bazy danych wyswietli liste wyrazów wg alfabetu zgodnie z metodą porównania - czyli przykładowa czcionka z ogonkiem moze byc wyswietlona w innej kolejnosci alfabetycznej niz powinna, jesli nie zastosujemy odpowiedniej metody porównania.

Tresc z krzakami mozna przekonwertować w taki sposób bezposrednio na stronie www.


<?php
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encodinf", "ISO-8859-2");
ob_start("ob_iconv_handler");
// Tutaj możemy umieścić resztę kodu skryptu i strony zakodowanego w Unikodzie.
// Do przeglądarki trafi ISO-8859-2
?>Co do przekonwertowania pobranych plików z bazy danych ( z poziomu shell) to polecam doinstalować Iconv potrafi przekodować plik oraz standardowe wejście (stdin). W przypadku wywołania programu bez parametru z nazwą pliku, iconv będzie oczekiwał na tekst w stdin. Argumenty programu są bardzo proste: -f kodowanie określa kodowanie pierwotne (from), a -t kodowanie określa kodowanie docelowe (to). Jako ostatni argument podajemy nazwę pliku. I tak, w przypadku kodowania z ISO do Unikodu wywołamy program następująco:
iconv -f ISO-8859-2 -t UTF-8 zażółć.txt > zażółć-utf.txt Dobrze, ale w przypadku gdy mamy wiele plików do przekodowania, ręczne wpisywanie komendy w linię poleceń będzie nużące. Co z tym zrobić? Iconv nie obsługuje konwersji wielu plików na raz, więc należy sobie pomóc językiem powłoki.

for i in `ls *.txt`; do
> cp $i /tmp/
> iconv -f ISO-8859-2 -t UTF-8 /tmp/$i >$i
> done Takim prostym skryptem przekodujemy wszystkie pliki z rozszerzeniem txt. Kopiujemy te pliki do katalogu /tmp/ ponieważ nie możemy czytać i zapisywać do tego samego pliku na raz.
Lista kodowań (i ich nazw) możliwych do wykorzystania jest dostępna po uruchomieniu programu z parametrem --list.

zwiastun
22-07-2009, 15:15
@Amfidiusz jak widzę poradził swoją metodą.
@hazael: Wszystko ładnie pięknie, tylko na jakiej to podstawie mniemasz, ze tak trzeba i po co?
Cały problem sprowadza się zwykle do poprawnego przeniesienia bazy danych. Żeby wszakże rozstrzygać cokolwiek, to trzeba by wiedzieć co, skąd, do czego i jak przenoszono.

hazael
22-07-2009, 17:11
Wszystko ładnie pięknie, tylko na jakiej to podstawie mniemasz, ze tak trzeba i po co?
Cały problem sprowadza się zwykle do poprawnego przeniesienia bazy danych. Żeby wszakże rozstrzygać cokolwiek, to trzeba by wiedzieć co, skąd, do czego i jak przenoszono.

Napisałem tak, bo domyślam się z jakim problemem się boryka. Sam przez to przechodziłem przenosząc baze danych ze starej joomli na nową.

W starej wersji jesli ktoś miał ustawione kodowanie na utf-8, to w bazie sql tresc z ogonkami była zapisywana w postaci krzaczków. W nowej wersji joomla tresc jest zapisywana w windows-1250. Więc odczytanie starej bazy w kodowaniu utf spowoduje krzaki w nowej joomli. Jedyna i szybka metoda to konwersja znaków w plikach bazie danych za pomocą iconv z utf-8 na win-1250.

Oczywiście to były moje domysły. jeżeli jednak jest to ciągle ta sama joomla - bez modyfikacji, to oczywiscie problemem jest zle wykonany zrzut bazy danych.

hazael
22-07-2009, 17:25
mozliwe jest też, że na poprzednim serwerze jest inna wersja bazy danych np starsza niż 4.1+ i wtedy mozna to rozwiazac w taki oto sposób:


<?php
/**
* Funkcja wczytuje plik sql do bazy danych
*
* @author FanFataL
* @param string Nazwa pliku z zrzutem bazy danych
* @param resource Uchwyt do połączenia z bazą danych
* @param [string] Kodowanie - tylko dla MySQL wersji 4.1 i wyższej (np. latin2)
* @return mixed
*/
function mysqlPutFile($url, $conn_id, $charset='latin2') {
// Sprawdzeine czy plik istnieje
if (!file_exists($url)) die('Brak pliku');

// Sprawdzenie czy wersja bazy danych jest 4.1+ (thx to omeck)
$set_charset = false;
if (function_exists('mysql_get_client_info')) {
if (preg_match('/^(\d+\.\d+)/', mysql_get_server_info($conn_id), $matched)) {
$v = (float)$matched[1];
if ($v>=4.1)
$set_charset = true;
}
}

if ($set_charset && $charset) {
// Ustawienie kodowania dla połączenia
$query = 'SET NAMES '.$charset;
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));

// Ustawienie kodowania i systemu porównań dla bazy danych
$query = 'SELECT DATABASE()';
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
$row = mysql_fetch_row($result);
$query = 'ALTER DATABASE `'.$row[0].'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));

// Ustawienie kodowania i systemu porównań dla istniejących tabel
$query = 'SHOW TABLES';
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
while ($row = mysql_fetch_row($result)) {
$query = 'ALTER TABLE `'.$row[0].'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
}
}

// Wczytanie pliku
if(!$file = @fopen($url, 'r')) die('Nie udało się odczytać pliku');
$query = '';
$is_create = false;

while (!feof($file)) {
$line = fgets($file);
$tmp = trim($line);
// Pominięcie komentarzy
if ($tmp!='' && substr($tmp, 0, 2)!='--' && substr($tmp, 0, 1)!='#') {
// Sprawdzenie czy nie jest tworzona tabela
if ($set_charset && $charset && !$is_create && preg_match('/^CREATE\s+TABLE\s+(IF\s+NOT\s+EXISTS\s+)?(`)?([\w\d\_]+)(\\2)?/im', trim($query), $matched)) {
$is_create = $matched[3]; // nazwa tabeli
}
// Sprawdzenie czy koniec zapytania
$end_pattern = '/;\s*((\#|(\-\-)).*?)?$/';
if (preg_match($end_pattern, $line)) {
$line = preg_replace($end_pattern, '', $line);
$query .= $line;
$result = @mysql_query($query, $conn_id) or die(mysql_error($conn_id));
if($is_create) { // Jak jest tworzona to zmieniamy kodowanie i system porównań
$query = 'ALTER TABLE `'.$is_create.'` DEFAULT CHARACTER SET '.$charset.' COLLATE '.$charset.'_general_ci';
@mysql_query($query, $conn_id) or die(mysql_error($conn_id));
$is_create = false;
}
$query = '';
}
else {
$query .= $line;
}
}
}
fclose($file);
}

// Przykład użycia
$con = mysql_connect('localhost','user','*******');
mysql_select_db('test');

mysqlPutFile('./kaalog/plik.sql', $con, 'latin2');
?>

Amfidiusz
22-07-2009, 17:59
I skoro się szuka porady w kwestii problemów z kodowaniem, to wypadałoby takie informacje podać od razu, a nie dopiero po wypytaniu o nie
Kompletnie nie znam się na bazach danych. Do phpMyAdmina zaglądam z wielką niechęcią tylko wtedy, kiedy muszę. Czy forum jest przeznaczone tylko dla zaawansowanych użytkowników, którzy wiedzą, gdzie mają szukać błędnych wartości i w jaki sposób je zaprezentować, aby uzyskać pomoc?


W każdej tabeli - gdy w phpMyAdminie przeglądasz ich strukturę - masz kolumnę "metoda porównywania napisów".
Informacje o kodowaniu powinieneś podać zarówno w odniesieniu do jednej, jak i do drugiej bazy (starej i nowej).

Stara baza:
http://i27.tinypic.com/2z9cvw6.jpg
Nowa baza:
http://i27.tinypic.com/2dtyrf4.jpg


Ponadto:
- brak informacji o samym Joomla! (wydanie, skąd pobrane)
- bak informacji, czy i jakie - opisane - sposoby rozwiązania problemów z kodowaniem stosowałeś (np. zdefiniowanie kodowania w pliku database.php)
Tu przyznaję, zdecydowanie wina leży po mojej stronie.
Jomla: 1.0.13 Stable (pobierana z tutejszych zasobów)
Nic nie próbowałem zmieniać. Kompletnie się na tym nie znam, więc postanowiłem zasięgnąć opinii na forum.
Export: Na domyślnych ustawieniach phpMyAdmin
Import: Wybrałem z rozwijanej listy latin2 (może trzeba było zostawić utf8?)
Po uploadzie plików zmieniłem jedynie dane bazy oraz adresy bezwzględne w configuration.php
Przenoszone z Superhost.pl Szybki Start
Przenoszone na Superhost.pl Biznes
Strona: maxenglish.edu.pl
Znaki polskie zmieniły się na krzaki jedynie w tekstach, które sam wpisywałem. Komponenty (np. BasicSchool) wyświetlały się poprawnie.

Dużo namieszałem zmieniając wszystko ręcznie? Wciąż mam dostęp do starego serwera i mogę wykonać migrację na nowy serwer w poprawny sposób.

zwiastun
22-07-2009, 18:22
daj mi na pw dostęp do starej i nowej bazy - zobaczymy

Tomaxo
26-07-2009, 23:29
a gdzie to naprawić jak mam tylko FTP w jakim pliku znajdę joomala 1.5.11 moja wersja http://euforia-game.isgreat.org/

patrycju5z
30-07-2009, 05:50
Ja mam troche inną sprawe z przenoszeniem joomli. Moje przenoszenie sprowadza sie z programu MAMP na serwer. Zwykle sa problemy wlasnie z krzaczkami. Czy dobrym sposobem jest zainstalowanie joomli na serwerze a potem eksport bazy i plików do MAMP. Nastepnie edycja na komputerze i po skonczonej pracy ponownie wysylka na serwer. Czy w tym przypadku ominę błędy z kodowaniem. zazwyczaj strony robie na swoim komputerze a potem dopiero wysylam na serwer poniewaz nie zawsze mam dostep do internetu, a jak mam to nie tak szybki aby pozowlil mi swobodnie w miare komfortową zabawe w joomla.

Pozdrawiam.

zwiastun
30-07-2009, 12:30
Nie ominiesz, jeśli nie będziesz wiedzieć, skąd się one biorą. Całość sprowadza się do poprawnego importu/eksportu z bazy i do bazy danych.

patrycju5z
31-07-2009, 14:16
Logiczne jest, ze kodowanie nowej bazy musi byc takie same jak starej bazy. W takim razie jakie jest najlepsze kodowanie dla joomli? utf8_general_ci ?

hizel
22-09-2009, 00:20
Mam ten sam problem, po przeniesieniu na inny serwer krzaczki. Wersja 1.0.15 stable. Na starym serwerze kodowanie było Unicode UTF-8. Przy wgrywaniu bazy na nowy serwer ustawiłem tak samo. Metoda porównywania napisów w niektórych tabelach jest utf8_general_ci a w innych latin2_general_ci ale na obu tak samo. W czym jest problem?
Kodowanie bazy wyeksportowanej ze starego serwera sprawdzałem w gżegżółce i program zidentyfikował jako utf8. Próbowałem baze konwertować na inne kodowania i wgrywać z innym kodowaniem ale bez efektu.