Төлем әдістері Abuse

PHPStorm ішіндегі конфигурацияланатын Xdebug

07.05.2021, 22:28

Түзету бағдарламалаудағы ең маңызды процестердің бірі болып саналады. Түзеткіштің көмегімен сіз бағдарламада не болып жатқанын, қандай функциялар орындалатынын, айнымалыларда не сақталғанын көре аласыз, сонымен қатар бәрін кезең-кезеңмен орындап, қате қай жолда және айнымалы мәндердің қандай мәндерінде орын алатынын дәл түсіне аласыз. .

Мысалы, PHP үшін Xdebug отладкасы пайдаланылады, PHPStorm ең танымал әзірлеу орталарының бірі болып табылады. Әрі қарай, жергілікті компьютерде және Docker бағдарламасында жөндеу үшін PhpStorm жүйесінде Xdebug конфигурациялау жолын қарастырамыз.

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 екінші жолы жөндеу, бақылау және ұқсас режимдер үшін отладчиктің қалай іске қосылатынын анықтайды:

  • иә - әрқашан, PHP сценарийлерін іске қосу кезінде;
  • жоқ - арнайы функцияларды пайдаланып кодтан ғана іске қосу;
  • триггер - сұраныс бойынша $_ENV, $_POST, $COOKIE немесе басқа массивтегі арнайы айнымалы мәнді пайдалана отырып. Бұл опция қажет емес кезде отладчик іске қосылмауы үшін бұл жағдайда ең қолайлы.

Үшінші xdebug.discover_client_host ақиқат, бұл жағдайда xdebug HTTP_X_FORWARDED_FOR тақырыбында өткен хостқа қосылуға тырысады. Хост келесі жолда көрсетілгендіктен, бұл мүмкіндік бұл жағдайда қажет емес. Әрі қарай, 127.0.0.1 және 9000 портын жөндеуді басқару үшін қосылу қажет болатын клиент хосты көрсетіледі. Бұл қазіргі уақытта PhpStorm жүйесінде әдепкі бойынша пайдаланылатын порт. Параметрлерді сақтағаннан кейін арнайы пәрменді пайдаланып Apache бағдарламасын қайта іске қосу керек:

 $ sudo systemctl restart apache2

Әрі қарай PhpStorm конфигурациялау керек. Бағдарламаны іске қосыңыз, содан кейін Іске қосу -> Конфигурацияларды өңдеу мәзірін ашыңыз. Сіздің алдыңызда отладчикті конфигурациялау қажет терезе ашылады.

PHPSTORM жүйесінде XDEBUG орнату

+ түймесін басып, ашылатын тізімнен PHP Remote Debugger таңдаңыз:

PHPSTORM ОРТЫНДА XDEBUG КОНФИГУРАСЫ

Біз параметрлерде ештеңені өзгертпейміз, біз тек осы жөндеу әдісінің атын көрсетеміз. Қосылымдар күтілетін сервер көрсетілмесе, барлық қосылымдар қабылданады.

PHPSTORM жүйесінде XDEBUG орнату

Xdebug қосылатын портты өзгерту қажет болса, File -> Settings -> PHP -> Debug -> DBGp Proxy мәзірін ашыңыз. Мұнда сіз қажетті портты көрсете аласыз.

PHPSTORM жүйесінде XDEBUG орнату

IDE қазір дайын деп айта аламыз. Енді жоғарғы құралдар тақтасындағы қоңызды басыңыз. Бағдарлама отладчиктің қосылуын күте бастайды және біз кодпен жолдың алдына жай ғана басу арқылы кодта бірнеше тоқтау нүктелерін орнатамыз:

PHPSTORM жүйесінде XDEBUG орнату

Енді браузерді конфигурациялау ғана қалады. Chrome үшін жүктеп алуға болады  арнайы кеңейтім. Оны орнатыңыз және жөндеу керек бетті ашыңыз. Кеңейтім белгішесін басып, Түзетуді таңдаңыз. Кеңейтім белгішесі жасыл түске боялады:

PHPSTORM жүйесінде XDEBUG орнату

Бетті жаңартып, PHPStorm-қа оралыңыз. Егер бәрі дұрыс орындалса, онда жөндеу сеансы басталады. Бағдарламаны алғаш рет іске қосқан кезде сізден файлдарға жергілікті жолдар мен қашықтағы жолдар арасындағы сәйкестікті конфигурациялау сұралуы мүмкін. Мұнда жергілікті сервер үшін ештеңе конфигурациялаудың қажеті жоқ. «Қабылдау» түймесін басыңыз:

PHPSTORM жүйесінде XDEBUG орнату

Осыдан кейін отладчик таңдалған тоқтау нүктесінде орындауды тоқтатады және бағдарламада жөндеу интерфейсі пайда болады:

PHPSTORM жүйесінде XDEBUG орнату

Енді Xdebug PhpStorm және Docker орнату жолын анықтайық.

Docker бағдарламасында PHP жөндеу

Docker-те кейбір күрделілік болуы мүмкін. Түзеткіштің өзі IDE-ге қосылуы керек болғандықтан, хостты контейнерге жіберу қажет. Windows амалдық жүйесінде мұны host.docker.internal мекенжайы арқылы жасауға болады. Бірақ Linux жүйесінде бұл әдепкі бойынша болмайды. Мұндай мекенжайды қосу үшін docker-compose файлына келесі жолдарды қосу керек:

extra_hosts:

host.docker.internal: host-gateway

Біз келесі каталог құрылымын қолданамыз:

PHPSTORM жүйесінде XDEBUG орнату

Ең аз талап етілетін 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-ге сәтті қосылады.

PHPSTORM жүйесінде XDEBUG орнату