Kui oled PHP-arendaja, siis tead, kui tähtis on koodis olevate vigade ja tõrgete kiire ja tõhus leidmine. Siin tuleb appi Xdebug – võimas PHP arendustööriist, mis võimaldab samm-sammult koodist läbi liikuda, muutujaid reaalajas jälgida ja rakenduse sisemist toimimist paremini mõista. Käesolevas juhendis näitame ja kirjeldame, kuidas seadistada Xdebug’i Zone veebimajutuses ning kuidas ühendada see Sublime Texti tekstiredaktoriga, mis pakub paindlikkust ja kasutajasõbralikku keskkonda PHP projektide jaoks. Pärast seadistamist saad oma rakendusi otse Sublime Textist debuggida, säästes sellega kõvasti aega ja vaeva.

Mida vajad seadistamiseks:
- Zone veebimajutus (sobib ka Starter pakett)
- Sublime Text tekstiredaktor
- Veebibrauser, näiteks Chrome
- Terminal, et luua SSH ühendusi ja kontrollida seadistusi
Selles juhendis on kasutatud Mac OS X-i, seega Windowsi või Linuxi kasutajad võivad kohata mõningaid erinevusi menüüdes ja klahvikombinatsioonides.
Alustuseks tuleb Minu Zone haldusliidesest sisse lülitada Xdebug laiendus. Selleks tuleb valida Veebimajutus -> Veebiserver -> Peadomeeni seaded -> Muuda -> PHP laiendused. Lüilita sisse XDebug, samuti tasub klikkida küsimärgil – avaneb Xdebug ametlik lehekülg, mis samuti seadistamisel vajalikuks võib osutuda. Kui muudatus tehtud, siis tuleb oodata muudatuse jõustumist, reeglina ei ole aeg pikem kui 5 minutit.
NB! Alamdomeeni testimisel tuleb jälgida, et laiendus oleks ka seal laetud.

Virtuaalserveri halduses tasuks ka üles märkida ka väärtus IP-silmusaadress (loopback IP-address), seda läheb hiljem vaja. Väärtuse leiab alajaotusest Serveriteenus -> Süsteemsed andmed:

Järgmiseks tuleks hoolitseda selle eest, et virtuaalserveris oleks mõni veebirakendus. Veebirakenduseks tohib antud juhul lugeda ka paar kõige lihtsamat rida PHP-koodi. Näiteks võib salvestada /domeenid/www.rfn.ee/index.php
-faili järgmised read:
<?php
echo "Hello world!";
echo "</br>";w
echo "Hello, the other world!";
Code language: PHP (php)
Veebileht võiks näha välja järgmine:

Kui juba brauser avatud, siis on hea moment lisada brauseripoolne Xdebug laiendus. https://chromewebstore.google.com/ lehelt tuleks otsida laiendust nimega Xdebug Chrome Extension ning see lisada. Mugavuse nimel võib laienduse lisada ka tööriistaribale (“Pin”).

Järgmiseks tuleks veenduda serveri poolt vaadates, et Xdebug seadistused oleksid sobivad. Kui Xdebug laiendus on paigaldatud, siis on vajalikud muudatused php.ini
failides juba automaatselt ellu viidud. Juhuks, kui Xdebug laiendus on varem juba aktiivne olnud ning mingil põhjusel vastav seadistus ei toimi, siis tasub laiendus taaskäivitada – konfiguratsioonifailid luuakse uuesti.
Kui Xdebug seadistus on korrektne, siis tasub katsetada PHP-meetodit xdebug_info()
. Kui asendada senine “rakenduse” kood meetodiga, siis veebilehte vaadates võiks tulemus olla järgnev:

Eduka testi korral saab vastava rea koodist eemaldada.
Seadistused on kirjas php.ini-failides. Kuidas php.ini faile vajadusel seadistada, on võimalik lugeda Zone abiartiklitest. Kui on soov mingeid Xdebug seadistusi veel täiendavalt muuta, siis muudatusi saab teha näiteks /phpini/global/php.ini
failis. Antud juhul siis on vaikeseadetega võrreldes muudetud logifaili nimi:
; xdebug.client_host=127.2.10.219 ; loopback aadress
; xdebug.client_port=9003 ; virtuaalserveri ja arvuti vaheliseks suhtluseks kasutatav port
; xdebug.mode=debug; xdebug töörežiim, muid võimalikke väärtusi näeb xdebug dokumentatsioonist
xdebug.log=/data02/virt123851/domeenid/www.rfn.ee/test/minu-eriti-eriline-xdebug.log
; logi asukoht, juhuks, kui kõik ei suju ootuspäraselt
; hoolitse, et vastav fail oleks õiges kohas
Code language: PHP (php)
Siin näites kirjas olevad väärtused on töös küll automaatselt, kuid vajadusel saab neid lugeda virtuaalserveri halduse süsteemsetest andmetest: Serveriteenus -> Süsteemsed Andmed.
Kui Xdebug on serveris valmis ühendusi looma, siis tuleb need ühendused tekstiredaktori/IDE pool kinni püüda. Selleks tuleb paigaldada Sublime Text’i Xdebug-klient. Subliime tekstis tuleb avada File -> Settings -> Package Control -> Install Package -> Xdebug client.

Xdebug kliendi seadistamiseks tuleb muuta seaded: Sublime Text -> Settings… -> Package Settings -> Xdebug -> Settings – User. Olulised parameetrid on järgmised:
{
"path_mapping": {
"/data02/virt123851" : "/Users/arne/dev/sshfs_mounts/rfn"
},
"host": "localhost",
"port": 9003
}
Code language: PHP (php)
Path mapping on vajalik, et serveris olevad failid oleksid vastavuses tekstiredaktori poolt muudetavate failidega. Ehk et serveris olevad failid peavad olema tekstiredaktori poolt juurdepääsetavad ning Xdebug klient peab aru saama, et mõlemal pool oleks samad failid. Antud näites on kasutusel SSHFS, mis võimaldab Apple’i operatsioonisüsteemiga arvutitele ligipääsu üle SSH-protokolli. Selle tulemusena saab serveris olevaid faile avada ja muuta nagu oleksid nad kohalikul kõvakettal. Peale Xdebug kliendi paigaldamist on menüüsse tekkinud juurde uus võimalus, Tools -> Xdebug. Käivitamiseks on vara, tuleb teha üks vahesamm.
Kui Xdebug on serveri pool töövalmis ja klient paigaldatud, siis on vaja mõlemad omavahel ära ühendada. Kuna eeldatavasti on SSH-ühendus juba tehtud, siis on see juba piisav ühenduse loomiseks. Kohalikust arvutist tuleb nüüd teha tagurpidi SSH-tunnel virtuaalserverist kohalikku arvutisse. Nüüd on vaja teada süsteemsetest andmetest loopback-ip aadressi. Käsk kohalikust arvutist on järgmine:
ssh -R 127.2.10.219:9003:localhost:9003 -N -f virt123851@rfn.ee
kus:
-R: reverse tunneling / tagurpidi tunnel, ehk ühendutakse serverist kohalikku arvutisse
-127.2.10.219:9003:localhost:9003 – serveri silmusaadressi port 9003 tuleb ühendada kohalikku silmusaadressi porti 9003
-N – käskude käivitamise keeld
-f – protsess liigutatakse taustale, tuleb hiljem käsitsi ära lõpetada
Code language: PHP (php)
Kui tunnel on loodud, siis tasub veenduda tegevus õnnestumises. Seda saab jooksvatest protsessidest: käsuga ps aux | grep 'ssh -R'
peaks kohalikus arvutis kuvatama välja äsja käivitatud käsk.

Järgmiseks on aeg avada Sublime Text ning avada serverist “rakenduse” fail. Kui fail on avatud, siis nüüd on õige aeg käivtada Xdebug. Vali Tools -> Xdebug -> Start Debugging. Taustal on seega käivitatud Xdebug klient, mis siis peaks kuulama virtuaalserverist tulevaid Xdebug päringuid. Kontrolliks võib käivitada kohalikus arvutis käsu
lsof -i :9003
Kui Sublime Textis on debug-sessioon käivitunud, siis peaks eelnev käsk näitama, kohaliku hosti port 9003 on kuuldel-ootel.

Selleks, et Xdebug sobival kohal koodis peatuks tuleks “rakenduses” lisada mõnele koodireale breakpoint. Seda saab teha kas menüüst Tools -> Xdebug -> Add/Remove Breakpoint, kontekstimenüüst Xdebug -> Add/Remove Breakpoint või siis viies kursori mõnele reale ning vajutades Command + F8.

Nüüd tasub pöörduda brauserist veebirakenduse poole. Esimese asjana tuleks Xdebug brauseri laiendusest valida “Debug”.

Kui peale seda lehekülge värskendada, siis võiks lehekülg jääda “ketrama”. See on täpselt see, mida vaja! Sublime Text samal ajal võiks kuvada midagi märksa asjalikumat nagu allpool oleval ekraanikuval:

On näha, et Breakpoint on aktiivne, millised on defineeritud muutujate väärtused ning kus täpsemalt kood seiskus.
Sellega on Xdebug käivitamine koos Sublime Textiga õnnestunud – virtuaalserveri koodi sisse lisatud Breakpointi puhul kood seiskub. Siit edasi on juba võimalik kõiki vahendeid ise katsetada. Lihtne näide allpool – tsükli sisse on lisatud Breakpoint ning lisaks on lisatud ka “Watch Expressions” käsuga avaldis, mille väärtust on soov kontrollida.

Kui lehe värskendamisel kood Breakpoint’i juures peatub, siis igakordselt on võimalik Xdebug Context aknas jälgida, mis on muutuja $value
hetkeväärtus. Breakpoint’ist edasi liikumiseks on võimalik kasutada erinevaid valikuid kontekstimenüüst või menüüst Tools -> Xdebug -> Run/Run To Line/Step Over/Step Into/Step Out/Stop/Detach. Selle käigus hakkab jooksvalt muutuma ka Xdebug Watch aknas oleva avaldise tulemus, sõltuvalt kas $value
on paarisarv või mitte.
Xdebug ei ole mõeldud kasutamaks pidevas režiimis, sisselülitamine on mõistlik vaid veaotsinguks. Seega peale “töö lõppu” tuleks Sublime Textist valida Tools -> Xdebug -> Stop Debugging (Close Windows) ning lõpetada ära ka SSH-tunnel. Selleks tuleks välja vaadata, miline oli vastava protessi id kasutades käsku ps aux | grep 'ssh -R'
ning siis vastav protsess lõpetada kasutades sudo kill {process_id}
.
Kui miskit ebaõnnestub, siis tasub viga otsida järjekorras:
- kas Xdebug laiendus töötab – vaadata üle php.ini failid, kontrollida, kas xdebug_info() meetod vastab, kas Xdebug seadistused on korrektsed?
- kas tunneli loomine õnnestus – kas aadressid on õiged, kas protsess käib, kas xdebug_info() oskab seda näidata?
- kas brauseri laiendus on sisse lülitatud?
- kas Sublime Textis on veaotsingu režiim sisse lülitatud? Igaks juhuks võib alati sessiooni katkestada ning uuesti alustada.
- kas Sublime Texti seadistused on õiged ning kas klient on pordis 9003 kuuldel?
- kui natuke nagu töötab, kuid mõne aja pärast mitte, siis tasub alati Debug-sessiooni Sublime Textist lõpetada ning uuesti alustada.
Lisainfot ja linke:
- Sublime Text: https://www.sublimetext.com
- Xdebug kodulehekülg: https://xdebug.org
- Derick Rethans’i (Xdebug looja) Youtube channel: https://www.youtube.com/@DerickRethansXdebug
- SSH ühenduse loomine: https://help.zone.eu/kb/ssh-uhenduse-loomine/
- php.ini seadistused: https://help.zone.eu/kb/kuidas-muuta-phpini-faili/
Navigeerimine
Populaarsed postitused

Kliendi edulugu ehk kuidas aeglane e-pood taas kiireks sai

Xdebug seadistamine Zone veebimajutuses: VSCode

Xdebug seadistamine Zone veebimajutuses: Sublime Text
