Fórum Root.cz

Hlavní témata => Server => Téma založeno: Josef Polách 23. 07. 2011, 08:16:16

Název: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 23. 07. 2011, 08:16:16
Zdravím a ptám se vyčerpav snad všechny možnosti:

Před léty jsem napsal několik skriptů PHP s databází MySQL, vše fungovalo na Slackware tuším 11 nebo 12, funguje dodnes. Opustil jsem to a včil asi po třech letech potřebuji udělat nějakou změnu, doplnění. Protože to nemohu dělat tam, kde to běží, vše jsem nainstaloval na jiný počítač s Ubuntu 10.04. Funguje Apache2, PHP i MySQL. Skripty se spustí, ale v některých situacích se zobrazuje nesprávně čeština ve věcech tahaných z DB, jsou tam otazníky místo např. ř, č... Přitom PHPMyAdmin zobrazuje vše správně. Změnil jsem variables character_set_* od MySQL na latin2 (všechno bylo tehdy v ISO-8859-2), nastavil jsem tak vše, co jsem našel, ale zřejmě jsem něco vynechal, možná došlo během let ke změnám, o nichž nevím a nemohu si dovolit to teď od základu znovu vše studovat (nebo někam instalovat starý Slackware) kvůli jednoduché úpravě, kterou chci a potřebuji provést. Děkuji za každou dobrou radu.

Pohoda, hezký den
Název: Re: Starý LAMP na novém stroji
Přispěvatel: McFly 23. 07. 2011, 09:18:01
Po každém připojení k databázi a následném vybrání databáze, se kterou chci pracovat, posílám na MySQL dotaz

Kód: [Vybrat]
mysql_query('SET NAMES latin2');
funguje OK (taky mi tu běží Slackware:-)
Název: Re: Starý LAMP na novém stroji
Přispěvatel: McFly 23. 07. 2011, 09:19:11
btw latin2 = ISO-8859-2
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 23. 07. 2011, 09:44:07
Děkuji za radu I na toto jsem už někde narazil, rád bych to však ošetřil nějakým jednorázovým nastavením. Ty skripty totiž běží na tom "starém" stroji a já si to potřebuji rozchodit na svém, novějším, upravit  a potom poslat bývalému kolegovi na ten starý. Navíc si nejsem jistý, co by ten přikaz způsobil na tom starém stroji.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 26. 07. 2011, 10:22:09
Zkusím se zeptat znovu a snad lépe: Jak přesvědčit MySQL (či kde může být chyba), aby komunikovala v latin2 (vždy, ne jen někdy) nějakým jednorázovým opatřením/nastavením, nejen hromadným zastrkáváním dalšího query? Na co jsem mohl zapomenout? Jak mohu chybu odhalit? Najít její kořenovou příčinu? Proč to v PHPMyAdminu ukazuje správně a ve skriptu jen někdy? Děkuji.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: KapitánRUM 26. 07. 2011, 10:53:39
2 Josef Polách

Pošli mi na sebe kontakt, když budu mít náladu, překóduju ti ten projekt do UTF-8.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 26. 07. 2011, 12:20:27
Děkuji moc za nabídku, není to však to, oč mi jde. Je to takto: V minulé práci jsem napsal intranetový projektík. Fungovalo to a kupodivu funguje i po čtyřech letech (to je ten starý LAMP na starém stroji, vše v latin2). Včil však potřebují, abych jim tam něco doplnil a vylepšil. Nemohu a nechci to ale dělat tam, proto jsem si to dal na svůj počítač, kde mám jiné - novější prostředí. Vše jsem nastavil, nicméně v některých případech se mi data tahaná z databáze zobrazují správně, někdy nesprávně (s otazníky místo č, ř...) a někdy vůbec (asi se porovnávají v odlišném kódování). Přitom stejná data v PHPMyAdminu jsou vidět a fungují správně. Mám za to, že je nějaké nastavení, které jsem nenašel, během těch let, kdy jsem měl pauzu, asi něco přibylo. Nechce se mi však věřit tomu, že se během té doby změnilo tolik, aby se ztratila zpětná kompatibilita. Dík za pochopení.

Překonvertit bych to snad dovedl i sám, raději bych však "čisté" řešení.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: alfi 26. 07. 2011, 14:04:31
já bych to řešil pořádně, tj. instalací nové verze do produkce (beztak už je tam vše hodně děravé..?) nebo přinejhorším staré pro test (pomůže i virtuální stroj s kopií produkce). jinak se dřív nebo později dostaneš do stavu, že na testu něco běží a po kopii do produkce už z podobně záhadného důvodu ne. to je jediné opravdu "čisté" řešení :-)
Název: Re: Starý LAMP na novém stroji
Přispěvatel: KapitánRUM 26. 07. 2011, 14:38:48
php.ini

default_charset = "latin2"
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 26. 07. 2011, 20:09:46
Dík za snahu. Samá voda, chová se to úplně stejně:(
Název: Re: Starý LAMP na novém stroji
Přispěvatel: noname 26. 07. 2011, 21:00:24
no, data z databaze muzou bejt vyndany spravne, ale treba v http hlavicce mas vynuceny neco spatne. tezko odhadovat.  neco zobrazit spravne cesky neni bohuzel otazkou jednoho centralniho nastaveni, je vic ovlivnujicich faktoru.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: hulka 26. 07. 2011, 21:23:06
A v čem se Vám zobrazuje špatně diakritika? Zkuste v prohlížeči nastavit patřičné kódování. Jako další můžete zkusit php skript zpustit v terminálu co Vám to produkuje. Stejný postup můžete použít přímo ručním zadáváním požadavků na mysql databázi. Tolik vše co můžete vyzkoušet při ladění. Více Vám neporadím, nejsem v tomto expert.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 27. 07. 2011, 18:01:22
Hlavičky http jsou správně, prohlížeč je nastavený správně, chybné diakritika je jen v řetězcích tahaných z databáze. Běžný text vypisovaný skriptem je OK. Jiné prohlížeče to ukazují úplně stejně (zkoušel jsem Chrome odjinud, FF odjinud, lokálně Lynx v konzole latin2, Lynx v konzole UTF8). PHPMyAdmin zobrazuje data správně. Podrobně jsem to popisoval v předešlých příspěvcích.

Můj názor je, že se něco (v MySOL) za ty asi čtyři roky změnilo, snad přibyla nějaká nová funkce, nějaké nové nastavení něčeho. V tom tuším problém. A nemohu na to přijít.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 27. 07. 2011, 18:17:55
Alfi: I já bych to tak řešil. O tom však nerozhoduji já a ti, kteří to provozují, se rozhodli mít to na tom starém "stroji". (Tedy fyzicky na novém, ale protože to s Linuxem moc neznají, šli cestou nejmenšího odporu a virtuálně tam dali ten starý Slackware a všecko tam přenesli a běží to).

A já si zase na svém malém a pomalém PC nemohu dovolit nějakou virtuálku se starým Slackem. Tož jsem to nasadil na aktuální LAMP zde a nedovedu odstranit popsanou chybu.

Nemohu uvěřit tomu, že by databáze nebyla schopná vracet data ve správném kódování. Zejména když přes PHPMyAdmin to jde. Už se ale opakuji. Co mohu dělat blbě?
Název: Re: Starý LAMP na novém stroji
Přispěvatel: McFly 27. 07. 2011, 18:30:58
PHPMyAdmin je dle mého profi aplikace, která počítá s tím, že každý mysql server může být nakonfigurován jinak (jeden má výchozí znakovou sadu UTF-8, další Latin2 atd) a proto se v nebrání použití SET NAMES, čímž si zajistí správné fungování PHPMyAdmin na Slackware 8 i 13.37 ;-)
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 27. 07. 2011, 22:52:58
Jdu do toho. Narvu tam SET_NAMES a když mi to zabere, pošlu jim to na ten "starý" stroj na vyzkoušení. Pak bych to předělal celé (pokud ten starý vezme SET_NAMES bez námitek). Samotného mě to zajímá, zítra na to vlítnu a dám vědět. Pohoda, hezký den.

Stejně mi to ale připadá nesystémové:( Když mě pořád něco našeptává, že to "SET_NAMES" by se nějak mělo dát vědět MySQL jednou pro vždy.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Josef Polách 27. 07. 2011, 23:27:43
Zkoušel jsem si databázi otevřít v konzoli latin2 i UTF-8, ale výpis tabulky mi vždycky vrátil paskvil.
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Logik 28. 07. 2011, 02:34:19
Nevím, jestli to platí furt, ale od určitý verze phpko natvrdo při startu nastavilo character set na utf8. Takže pravděpodobně se tomu set names nevyhneš. U všech ostatních knihoven to jde v my.cnf, jen u php ne (teda jestli se něco nezměnilo).

Název: Re: Starý LAMP na novém stroji
Přispěvatel: alfi 28. 07. 2011, 12:00:50
Alfi: I já bych to tak řešil. O tom však nerozhoduji já a ti, kteří to provozují, se rozhodli mít to na tom starém "stroji". (Tedy fyzicky na novém, ale protože to s Linuxem moc neznají, šli cestou nejmenšího odporu a virtuálně tam dali ten starý Slackware a všecko tam přenesli a běží to).

A já si zase na svém malém a pomalém PC nemohu dovolit nějakou virtuálku se starým Slackem. Tož jsem to nasadil na aktuální LAMP zde a nedovedu odstranit popsanou chybu.
to se pak radí těžko.. když už to provozujou virtuálně - co tak jim dodat nový virtuální image, který bude dělat totéž a bude fungovat na aktuálních verzích? :-)
a nebo si někde aspoň na chvíli půjčit virtuální stroj pro ladění.. dneska už to stojí stokoruny.

jinak s kódováním v php a mysql jsem při přechodu mezi verzemi taky zápasil (teď už nevím, jestli mezi mysql 3.x a 4x. nebo 4.x a 5.x), celkem spolehlivě to řeší

set names 'latin2'; (pro kompatibilitu se starou mysql)
nebo
set character set 'utf8'; (pro korektní kódování u nových instalací)

ale musí to být ve všech skriptech, které se připojujou. a netuším, co to udělá na té původní mysql..
Název: Re: Starý LAMP na novém stroji
Přispěvatel: anonym 28. 07. 2011, 12:23:05
Pokud hodláte upravovat scripty, tak po připojení na db použijte funkci mysql-set-charset viz. http://www.php.net/manual/en/function.mysql-set-charset.php (podmínka je php 5), je to lepší než nastavovat SET NAMES v mysql_query
Název: Re: Starý LAMP na novém stroji
Přispěvatel: alfi 28. 07. 2011, 12:52:43
... (podmínka je php 5)
a přesně to bude jedna z věcí, která na původním systému nebude fungovat kvůli zastaralé verzi php..
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Kit 28. 07. 2011, 15:37:40
Možná jsi jen zapomněl na CHARACTER SET při vytváření databáze.

http://dev.mysql.com/doc/refman/5.0/en/create-database.html
Název: Re: Starý LAMP na novém stroji
Přispěvatel: Logik 28. 07. 2011, 22:54:41
Nezapoměl. Kódování databáze je irelevantní, jde o to, v jakém kódování komunikuje s klientem. A to je prostě od určité verze php utf8 a co vím nejde to překonfigurovat.