Отклањање грешака се сматра једним од најважнијих процеса у програмирању. Користећи програм за отклањање грешака, можете видети шта се дешава у програму, које функције се изводе, шта се чува у променљивим, а такође изводите све корак по корак и разумете тачно на којој линији и на којим вредностима варијабли долази до грешке .
На пример, за ПХП се користи Ксдебуг дебуггер, ПХПСторм је једно од најпопуларнијих развојних окружења. Затим ћемо погледати како да конфигуришемо Ксдебуг у ПхпСторму за отклањање грешака на вашем локалном рачунару иу Доцкер-у.
Хајде да разговарамо о томе како се отклањање грешака врши на локалном серверу.
Хајде да погледамо цео процес користећи пример Убунту-а и ПХП интерпретера конфигурисаног са Апацхе-ом. За друге конфигурације, путање до датотека могу се разликовати, али суштина се не мења. Ксдебуг дебагер вам омогућава да паузирате извршавање кода, прегледате стек позива и садржај променљивих. Његов једини недостатак је што нема погодан контролни интерфејс. У сврху управљања отклањањем грешака, обично се користи ИДЕ. Али ИДЕ не може ни на који начин рећи дебагеру да треба да почне да отклања грешке, јер је одговоран само за код. Да бисте то урадили, биће вам потребна и екстензија претраживача Дебуг Хелпер, помоћу које можете омогућити режим за отклањање грешака.
Прво морате да инсталирате Ксдебуг. Да бисте то урадили, покрените:
$ sudo apt install xdebug
Када се процес инсталације Ксдебуг-а заврши, требало би да конфигуришете програм тако да када започнете сесију отклањања грешака, покушаће да се повеже са нашим ИДЕ-ом да контролише отклањање грешака. Да бисте то урадили, додајте следеће редове у датотеку /etc/php/7.4/apache2/conf.d/20-xdebug.ini
у верзији Ксдебуг 2:
$ sudo vi /etc/php/7.4/apache2/conf.d/20-xdebug.ini zend_extension=xdebug.so xdebug.remote_enable=1 xdebug.remote_host=127.0.0.1 xdebug.remote_connect_back=1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.remote_mode=req xdebug.remote_autostart=false
За нову верзију најбоље је користити другачији формат:
xdebug.mode=debug xdebug.start_with_request=trigger xdebug.discover_client_host = false xdebug.client_host = 127.0.0.1 xdebug.client_port = 9000
Хајде да ближе погледамо подешавања. Први параметар xdebug.mode
је режим отклањања грешака, могуће опције:
develop
- омогућава излаз додатних информација, замењује вар_думп;
debug
- режим извршавања кода ред по ред, што је управо оно што је потребно у овом случају;
profile
- профилисање;
trace
- траг извршења програма.
Омогућава неколико режима истовремено када су наведени одвојени зарезима. Други ред кдебуг.старт_витх_рекуест дефинише како ће се програм за отклањање грешака покренути за отклањање грешака, праћење и сличне режиме:
Трећи xdebug.discover_client_host
је тачан, у ком случају кдебуг покушава да се повеже са хостом који је прослеђен у заглављу HTTP_X_FORWARDED_FOR
. Пошто је хост наведен у следећем реду, ова функција у овом случају није потребна. Следеће, клијентски хост је назначен где треба да се повежете да бисте управљали отклањањем грешака 127.0.0.1 и портом 9000. Ово је порт који се подразумевано користи у ПхпСторм-у тренутно. Након што сачувате подешавања, потребно је да поново покренете Апацхе помоћу посебне команде:
$ sudo systemctl restart apache2
Затим морате да конфигуришете ПхпСторм. Покрените програм, а затим отворите мени Покрени -> Уреди конфигурације. Пред вама ће се отворити прозор у коме треба да конфигуришете дебагер.
Кликните на дугме + и изаберите ПХП Ремоте Дебуггер са листе која се отвара:
Не мењамо ништа у подешавањима, само наводимо назив овог метода за отклањање грешака. Ако сервер са којег ће се очекивати везе није наведен, онда ће све везе бити прихваћене.
Ако треба да промените порт на који ће се Ксдебуг повезати, отворите мени Филе -> Сеттингс -> ПХП -> Дебуг -> ДБГп Проки. Овде можете одредити жељени порт.
Можемо рећи да је ИДЕ сада спреман. Сада кликните на бубу на горњој траци са алаткама. Програм ће почети да чека да се програм за отклањање грешака повеже и ми ћемо поставити неколико тачака прекида у коду једноставним кликом испред реда са кодом:
Сада остаје само да конфигуришете претраживач. За Цхроме можете преузети посебно проширење. Инсталирајте га и отворите страницу на којој желите да отклоните грешке. Кликните на икону проширења и изаберите Отклањање грешака. Икона екстензије ће постати зелена:
Освежите страницу и вратите се на ПХПСторм. Ако је све урађено исправно, тамо ће почети сесија отклањања грешака. Када први пут покренете програм, од вас ће се можда тражити да конфигуришете кореспонденцију између локалних путања до датотека и удаљених. Овде нема потребе да конфигуришете било шта за локални сервер. само кликните на Прихвати:
Након тога, програм за отклањање грешака ће зауставити извршавање на изабраној тачки прекида и интерфејс за отклањање грешака ће се појавити у програму:
Сада хајде да схватимо како да подесимо Ксдебуг ПхпСторм и Доцкер.
Доцкер може бити сложен. Пошто сам дебагер мора да се повеже са ИДЕ, неопходно је проследити хост у контејнер. На оперативном систему Виндовс то се може урадити помоћу хост.доцкер.интернал адресе. Али на Линук-у се то не дешава подразумевано. Да бисте додали такву адресу, потребно је да додате следеће редове у доцкер-цомпосе:
extra_hosts:
host.docker.internal: host-gateway
Користимо следећу структуру директоријума:
Минимални потребан docker-compose.yaml
ће изгледати овако:
version: '3.5' networks: losst-network: services: nginx: image: nginx ports: - '8094:80' volumes: - ./www/:/var/www/ - ./conf/nginx:/etc/nginx/conf.d networks: - losst-network php-fpm: build: context: ./conf/php-fpm extra_hosts: host.docker.internal: host-gateway volumes: - ./www:/var/www/ networks: - losst-network
Једноставно декларишемо два контејнера, nginx и php-fpm
. Не правимо промене у првом, тако да можете једноставно да узмете званичну слику, монтирате изворну фасциклу, конфигурациону датотеку и проследите порт. У другом контејнеру морате да инсталирате и конфигуришете Ксдебуг, тако да ће морати да се компајлира на основу званичног пхп контејнера. За исти контејнер, потребно је да наведете директиву extra_hosts
без ње, ништа неће радити. Нгинк конфигурација је такође прилично стандардна:
server { listen 80; server_name _ !default; root /var/www/; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.html index.htm index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } error_page 404 /index.php; location ~ .php$ { fastcgi_pass php-fpm:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } }
Овако се конфигурише обрада ПХП скрипти у пхп-фпм контејнеру и преусмеравање непостојећих УРЛ-ова на index.php
, што је сасвим стандардно за многе оквире и ЦМС. У Доцкерфилеу пхп-фпм контејнера, то изгледа овако:
Инсталирамо кдебуг користећи пецл, а затим копирамо његову конфигурациону датотеку у контејнер. Фајл:
xdebug.mode=debug xdebug.start_with_request=trigger xdebug.discover_client_host = false xdebug.client_host = host.docker.internal xdebug.client_port = 9000
Контејнер има инсталиран Ксдебуг 3 за ПХП 8 јер стара верзија више не ради са овом верзијом језика, па се користи нова конфигурациона синтакса. Па, домаћин, host.docker.internal
, који је претходно био регистрован у доцкер-цомпосе.иамл. кдебуг ПХПСторм доцкер подешавање је завршено. Затим можете покренути пројекат:
docker-compose up --build
Сада, као иу претходној опцији, можете да омогућите режим за отклањање грешака у претраживачу, освежите страницу и програм за отклањање грешака ће се успешно повезати са ИДЕ-ом, упркос чињеници да ради у Доцкер-у
Apply the discount by inserting the promo code in the special field at checkout:
Apply the discount by inserting the promo code in the special field at checkout: