Kifejezések keresése a fájlrendszerben & adatbázisban

[Ezt a cikket 10 perc elolvasni.]

Az egyik leggyakoribb kérdés, amivel mostanában találkozom az az, hogy hogyan is keressünk meg egy megadott kifejezést, amely az oldalunk egy bizonyos szekcióját érinti. Főként akkor szembesülünk ezzel a feladattal, amikor szeretnénk lefordítani, módosítani, esetleg kiegészíteni vagy magázó formátumról tegezőre váltani egy szót vagy éppen egy mondatot, de az ide kapcsolódó “Ez meg honnan a fenéből jön?” kérdésre is sokan keresik a választ eredménytelenül.

Rutinos WordPress felhasználók rögtön rá is vágják, hogy ezeket bizony a fordítási fájlokon keresztül tudjuk alakítgatni, tehát használjuk a PoEdit programot vagy a Loco Translate bővítményt, ha a vezérlőpulton keresztül dolgoznánk szívesebben. Köztudott, hogy a legtöbb sablon és bővítmény már a könnyű fordíthatóság elve alapján készül, így ha kész fordítással nem is, de egy meglévő “pot” fájllal biztosan rendelkezik, aminek segítségével létre tudjuk hozni a nekünk szükséges po/mo nyelvi fájlt.

Ez a válasz jó, valóban ez az első lépés, azonban nagyon sokszor kerülünk olyan helyzetbe, amikor a keresett kifejezés nem található meg a fordításban vagy éppen hiába lett lefordítva, mégsem változik semmi az oldalon. Ilyen esetben nincs más teendő, el kell kezdeni kézzel levadászni a fordításra váró szavunkat, ez pedig elég idegőrlő és időigényes feladat tud lenni, főként komplex sablonok vagy bővítmények esetén. Legtöbbször ez az a helyzet, amikor a fejlesztő lustára vette a figurát és nem (jól) építette bele a keresett kifejezést a fordításba vagy éppen úgy gondolta, hogy senki sem akar majd azon a bizonyos részen változtatni és így nemes egyszerűséggel bekódolta a PHP funkciók vagy az adatbázis tartalma közé (hardcoded).

Először is tisztázzuk, hogy hol rejtőzhet egy ilyen kifejezés.

Leggyakrabban a fájlrendszerben, főként PHP vagy éppen a JavaScript fájlok tartalmaiban. Ha kellően kitartóak és türelmesek vagyunk, akkor biztosan meg is találhatjuk, amit keresünk, persze egyesével átnézni több száz vagy éppen ezer fájlt nem túl lelkesítő. Szerencsére erre is mutatok egy nagyon kényelmes trükköt rövidesen.

Ritkább eset, de azért gyakran előfordul az is, hogy az adatbázisban lesz a kifejezésünk. Például nemrég dolgoztam egy oldalon, ahol egy bővítmény a telepítésekor az adatbázisba illesztette az alapértelmezett kimenő email sablonját (angolul), beállítással pedig nem rendelkezett, így ha magyarra akartam fordítani az üzenetet, amit a felhasználók megkaptak kénytelen voltam az adatbázisban megtenni ezt. Tehát ha már mindent átnéztünk és mégsem találtunk semmit, akkor érdemes errefelé is nézelődni.

Harmadik opció, ami szintén megeshet az az, hogy a szó vagy mondat, amire vadászunk nem is a mi oldalunkról érkezik. Ez akkor történhet meg, amikor egy bővítmény például CDN-ről vagy saját szerverről tölti be a működéséhez szükséges rendszerfájljait (pl: JavaScriptek). Ilyen esetben sokat nem tehetünk, mivel külső erőforrásokat nem fogunk tudni módosítani. Ideiglenes kerülőút lehet a bővítmény szerkesztése és a külső erőforrás módosított változatának lokális betöltése, persze ilyen esetben megszűnik a frissítés lehetősége, mivel a következő update alkalmával búcsút is inthetünk az összes változtatásunknak. Szerencsére ez az eset a legritkább mind közül.

Vegyük most sorra a fenti lehetőségeket részletesen, kezdjük is a leggyakoribb eshetőséggel, miszerint a keresett kifejezésünk a fájlrendszerben lesz.

A példa kedvéért legyen mondjuk a “Search” szó, amit szeretnénk átírni “Keresés”-re. Megnéztük a fordításokat, szerepel ugyan bennük, le is fordítottuk, de egy helyen mégis angol maradt. Elkezdjük nézegetni a sablon PHP fájljait, találomra megnyitunk néhányat, rákeresünk Notepad++ segítségével a kifejezésre, de 5 perc után megunjuk és ráhagyjuk az egészet. Nem lehetne ezt automatizálni valahogy? Dehogynem! Mint ahogy szinte mindig, most is a Total Commander lesz a legjobb barátunk, ugyanis rendelkezik egy olyan funkcióval, ami képes a fájlok tartalmain belül keresni, tehát elég megadni a kifejezést, a cél mappát és rövidesen listázza is a találatokat. Ami további előny, hogy mindezt FTP-n keresztül is el tudja végezni, tehát elég kiválasztani például a sablonunk könyvtárát, elindítani a keresést és így pillanatok alatt látni is fogjuk, hogy mely fájlokban szerepel a “Search” szó.

Ahhoz, hogy ezt végrehajtsuk mindössze be kell jelentkeznünk FTP-re a Total Commander segítségével és el kell navigálnunk abba a könyvtárba, ahol keresni szeretnénk. Ha nem tudjuk, hogy honnan is jöhet a kifejezés, akkor érdemes a wp-content mappán belül keresni, így átnézi az összes bővítményt és sablont is. Ez kicsit tovább tarthat ugyan, de még így is jóval gyorsabb lesz, mint manuálisan megnyitogatni az összes fájlt.

Ha eddig megvagyunk, akkor nyissuk meg a “Parancsok / Keresés” menüpontot (vagy nyomjuk meg az ALT + F7 billentyűkombinációt) és elénk is tárul a keresési felület. Felül az “Amit keres” részhez most ne írjunk semmit, mert az akkor hasznos, amikor bizonyos fájlt keresünk név alapján, de mi most a fájlok tartalmában akarunk kutakodni, így tegyünk egy pipát a “Szöveg” rubrika elé és írjuk oda a kifejezést, amit meg szeretnénk találni. Példánk alapján legyen ez a “Search”.

A “Keresés indítása” gombbal el is kezdi pásztázni a kiválasztott mappánk fájlrendszerének tartalmát és alul listázza is a találatokat. Ezután az F4 gombbal rögtön tudjuk is szerkeszteni őket és át tudjuk írni bennük a kifejezésünket (erre a feladatra a Notepad++ ajánlott, mint szerkesztő).

Ha a rejtőzködő szavunk az adatbázisban húzta meg magát, akkor sincs veszve semmi, mivel PHPMyAdmin segítségével könnyedén be tudjuk mérni. Ehhez mindössze annyit kell tennünk, hogy bejelentkezés után a bal oldali listából kiválasztjuk az oldalunk adatbázisát, majd a felső menüsorból a “Keresés”-re kattintunk. A “keresendő szavak vagy értékek” mezőbe írjuk a megtalálni kívánt kifejezést, a belső tábláknál pedig kattintsunk a “Mind kijelölése” gombra, így az adatbázis teljes tartalmában fog lefutni a keresés. Finomhangolhatjuk a keresést, hogy csak az egyik szó, minden szó vagy a beírt pontos kifejezés szerepeljen a találatok között. Ez egyéni döntés és a keresett kifejezés komplexitásától függ. Egy szó esetén maradhat az alapértelmezett értéken.

Az “Indítás” gombra klikkelést követően valami hasonlót fogunk látni:

Átlátható felsorolással kerülnek listázásra a találatok, a “Tartalom” gomb pedig mutatja is a kifejezésünk helyét a megadott táblában. Itt azért szükséges némi technikai ismeret és fontos megjegyezni, hogy bárminemű adatbázis módosítás előtt minden esetben készítsünk biztonsági mentést, mert nagyon könnyű hibát ejteni, utólag pedig nem biztos, hogy egyszerű lesz a javítás. Ha meg is van a keresett kifejezés, akkor sem szabad hirtelen beleugrani a cserébe, ugyanis ezek legtöbbször szérializált adattömbök, tehát csak olyan eszközzel végezhető el a csere, ami tudja ezeket megfelelően kezelni. Ilyen például a “Better Search & Replace” bővítmény vagy az “Interconnectit Search & Replace” eszköze.

Azoknak is szeretnék egy-két tippet adni, akik rendelkeznek root, azaz rendszergazdai hozzáféréssel a tárhelyük szerveréhez, ez igaz minden olyan esetben, ahol VPS-t vagy dedikált szervert bérelsz. Ekkor nem szükséges Total Commander segítségével FTP- n keresztül pásztázni a fájlokat, hiszen a kezünkben van a teljes eszköztár ahhoz, hogy ezt pillanatok alatt megtehessük rendszer szinten. Ezek a parancsok nagyon hasznosak egy esetleges malware fertőzés kitakarításának során is.

Kifejezés keresése egy megadott fájlban:

grep search /var/www/index.html

Itt a grep maga a parancs, amit futtatunk, a “search” maga a kifejezés, amit keresünk, ezután pedig a teljes útvonal a fájlhoz, amiben keresni szeretnénk (a példában ez az index.html).

Kifejezés keresése egy könyvtár teljes tartalmában:

grep -r "search" /var/www

A parancs ugyanaz, viszont kiegészül egy “-r” kapcsolóval, ami a rekurzív keresést hivatott előcsalogatni, azaz így a megadott útvonalon szereplő könyvtár teljes tartalmában fog lefutni a keresés.

Pontos kifejezés keresése:

grep -w "search" index.html

A “-w” kapcsoló használata szükséges akkor, ha csak a pontos találatokat akarjuk megjeleníteni, azaz csak az olyan találatok kerülnek így istázásra, amiben az általunk beírt módon szerepel a megadott szó.

Kettő vagy több kifejezés keresése:

egrep -w 'kifejezes1|kifejezes1' /var/www/index.html

Itt már az egrep parancsot használjuk és a fenti logikát követve rá tudunk keresni kettő vagy akár több szóra is.

Ezek lennének az alapok, de természetesen ezzel koránt sincs vége. A grep egy nagyon hasznos és igen sokoldalú eszköz temérdek kapcsolóval. Nem igen van olyan keresési feladat, amit ne lehetne végrehajtani a segítségével, tehát érdemes utánaolvasni és további példákat keresni a használatára, ha a fenti alap parancsok nem lennének elegendőek az aktuális helyzetben.

A fenti ismeretek birtokában úgy gondolom bárki képes lesz megtalálni bármilyen rejtőzködő kifejezést, jöjjön az akár a fájlrendszerből, akár az adatbázisból. Ha esetleg mégsem így lenne, akkor szívesen segítek, csak hagyj alul egy kommentet vagy küldj nekem egy üzenetet.

Sikeres vadászatot kívánok!

Ha tetszik, mutasd meg másoknak is: