Түзету бағдарламалаудағы ең маңызды процестердің бірі болып саналады. Түзеткіштің көмегімен сіз бағдарламада не болып жатқанын, қандай функциялар орындалатынын, айнымалыларда не сақталғанын көре аласыз, сонымен қатар бәрін кезең-кезеңмен орындап, қате қай жолда және айнымалы мәндердің қандай мәндерінде орын алатынын дәл түсіне аласыз. .
Мысалы, PHP үшін Xdebug отладкасы пайдаланылады, PHPStorm ең танымал әзірлеу орталарының бірі болып табылады. Әрі қарай, жергілікті компьютерде және Docker бағдарламасында жөндеу үшін PhpStorm жүйесінде Xdebug конфигурациялау жолын қарастырамыз.
Жергілікті серверде отладка қалай орындалатыны туралы сөйлесейік.
Ubuntu мысалы мен Apache конфигурацияланған PHP интерпретаторын пайдаланып бүкіл процесті қарастырайық. Басқа конфигурациялар үшін файлдарға апаратын жолдар әртүрлі болуы мүмкін, бірақ мәні өзгермейді. Xdebug отладчик кодты орындауды кідіртуге, қоңыраулар стегі мен айнымалы мәндердің мазмұнын көруге мүмкіндік береді. Оның жалғыз кемшілігі - ыңғайлы басқару интерфейсі жоқ. Түзетуді басқару мақсатында әдетте IDE пайдаланылады. Бірақ IDE отладчикке жөндеуді бастау керек екенін айта алмайды, себебі ол тек код үшін жауап береді. Мұны істеу үшін сізге отладтау режимін қосуға болатын Debug Helper шолғыш кеңейтімі де қажет болады.
Алдымен Xdebug орнату керек. Ол үшін іске қосыңыз:
$ sudo apt install xdebug
Xdebug орнату процесі аяқталғаннан кейін, бағдарламаны түзету сеансын бастағанда, жөндеуді басқару үшін IDE-ге қосылуға тырысатындай етіп конфигурациялауыңыз керек. Ол үшін Xdebug 2 нұсқасындағы /etc/php/7.4/apache2/conf.d/20-xdebug.ini
файлына келесі жолдарды қосыңыз:
$ 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
- қосымша ақпаратты шығаруға мүмкіндік береді, var_dump-ті қайта анықтайды;
debug
– кодты жол бойынша орындау режимі, бұл дәл осы жағдайда қажет;
profile
- профильдеу;
trace
– программаның орындалу ізі.
Үтірмен бөлінген тізімде бір уақытта бірнеше режимді қосады. xdebug.start_with_request екінші жолы жөндеу, бақылау және ұқсас режимдер үшін отладчиктің қалай іске қосылатынын анықтайды:
Үшінші xdebug.discover_client_host
ақиқат, бұл жағдайда xdebug HTTP_X_FORWARDED_FOR
тақырыбында өткен хостқа қосылуға тырысады. Хост келесі жолда көрсетілгендіктен, бұл мүмкіндік бұл жағдайда қажет емес. Әрі қарай, 127.0.0.1 және 9000 портын жөндеуді басқару үшін қосылу қажет болатын клиент хосты көрсетіледі. Бұл қазіргі уақытта PhpStorm жүйесінде әдепкі бойынша пайдаланылатын порт. Параметрлерді сақтағаннан кейін арнайы пәрменді пайдаланып Apache бағдарламасын қайта іске қосу керек:
$ sudo systemctl restart apache2
Әрі қарай PhpStorm конфигурациялау керек. Бағдарламаны іске қосыңыз, содан кейін Іске қосу -> Конфигурацияларды өңдеу мәзірін ашыңыз. Сіздің алдыңызда отладчикті конфигурациялау қажет терезе ашылады.
+ түймесін басып, ашылатын тізімнен PHP Remote Debugger таңдаңыз:
Біз параметрлерде ештеңені өзгертпейміз, біз тек осы жөндеу әдісінің атын көрсетеміз. Қосылымдар күтілетін сервер көрсетілмесе, барлық қосылымдар қабылданады.
Xdebug қосылатын портты өзгерту қажет болса, File -> Settings -> PHP -> Debug -> DBGp Proxy мәзірін ашыңыз. Мұнда сіз қажетті портты көрсете аласыз.
IDE қазір дайын деп айта аламыз. Енді жоғарғы құралдар тақтасындағы қоңызды басыңыз. Бағдарлама отладчиктің қосылуын күте бастайды және біз кодпен жолдың алдына жай ғана басу арқылы кодта бірнеше тоқтау нүктелерін орнатамыз:
Енді браузерді конфигурациялау ғана қалады. Chrome үшін жүктеп алуға болады арнайы кеңейтім. Оны орнатыңыз және жөндеу керек бетті ашыңыз. Кеңейтім белгішесін басып, Түзетуді таңдаңыз. Кеңейтім белгішесі жасыл түске боялады:
Бетті жаңартып, PHPStorm-қа оралыңыз. Егер бәрі дұрыс орындалса, онда жөндеу сеансы басталады. Бағдарламаны алғаш рет іске қосқан кезде сізден файлдарға жергілікті жолдар мен қашықтағы жолдар арасындағы сәйкестікті конфигурациялау сұралуы мүмкін. Мұнда жергілікті сервер үшін ештеңе конфигурациялаудың қажеті жоқ. «Қабылдау» түймесін басыңыз:
Осыдан кейін отладчик таңдалған тоқтау нүктесінде орындауды тоқтатады және бағдарламада жөндеу интерфейсі пайда болады:
Енді Xdebug PhpStorm және Docker орнату жолын анықтайық.
Docker-те кейбір күрделілік болуы мүмкін. Түзеткіштің өзі IDE-ге қосылуы керек болғандықтан, хостты контейнерге жіберу қажет. Windows амалдық жүйесінде мұны host.docker.internal мекенжайы арқылы жасауға болады. Бірақ Linux жүйесінде бұл әдепкі бойынша болмайды. Мұндай мекенжайды қосу үшін docker-compose файлына келесі жолдарды қосу керек:
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
. Біз біріншісіне өзгертулер енгізбейміз, сондықтан сіз жай ғана ресми суретті түсіріп, бастапқы қалтаны, конфигурация файлын орнатып, портты жібере аласыз. Екінші контейнерде Xdebug орнату және конфигурациялау қажет, сондықтан оны ресми PHP контейнері негізінде құрастыру керек. Сол контейнер үшін extra_hosts
директивасын көрсету керек, онсыз ештеңе жұмыс істемейді; Nginx конфигурациясы да өте стандартты:
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; } }
php-fpm контейнеріндегі PHP сценарийлерін өңдеу және жоқ URL мекенжайларын index.php
файлына қайта бағыттау осылайша конфигурацияланады, бұл көптеген фреймворктер мен CMS үшін стандартты болып табылады. php-fpm контейнерінің Docker файлында ол келесідей көрінеді:
Біз xdebug бағдарламасын pecl көмегімен орнатамыз, содан кейін оның конфигурация файлын контейнерге көшіреміз. Файл:
xdebug.mode=debug xdebug.start_with_request=trigger xdebug.discover_client_host = false xdebug.client_host = host.docker.internal xdebug.client_port = 9000
Контейнерде Xdebug 3 for PHP 8 орнатылған, себебі ескі нұсқа енді тілдің осы нұсқасымен жұмыс істемейді, сондықтан жаңа конфигурация синтаксисі пайдаланылады. Алдында docker-compose.yaml ішінде тіркелген хост, host.docker.internal
. xdebug PHPStorm докерін орнату аяқталды. Содан кейін жобаны іске қосуға болады:
docker-compose up --build
Енді, алдыңғы опциядағыдай, браузерде жөндеу режимін қосуға, бетті жаңартуға болады және отладчик Docker-де жұмыс істеп тұрғанына қарамастан, IDE-ге сәтті қосылады.