Maksājuma metodes Abuse

Xdebug konfigurēšana programmā PHPStorm

07.05.2021, 22:28

Programmēšanā atkļūdošana ir viens no svarīgākajiem procesiem. Ar atkļūdošanas programmas palīdzību var redzēt, kas notiek programmā, kādas funkcijas tiek izpildītas, kas tiek saglabāts mainīgajos, kā arī izpildīt visu soli pa solim un saprast, kurā rindā un pie kādām mainīgo vērtībām rodas kļūda.

Piemēram, Xdebug atkļūdošanas programma tiek izmantota PHP, PHPStorm ir viena no populārākajām izstrādes vidēm. Tālāk apskatīsim, kā konfigurēt Xdebug programmā PhpStorm atkļūdošanai lokālajā datorā un Docker.

XDEBUG konfigurēšana programmā PHPSTORM

Apskatīsim, kā tiek veikta atkļūdošana lokālajā serverī.

Apskatīsim visu procesu, kā piemēru izmantojot Ubuntu un PHP interpretatoru, kas konfigurēts ar Apache. Citās konfigurācijās failu ceļi var atšķirties, bet būtība ir tāda pati. Xdebug atkļūdošanas programma ļauj apturēt koda izpildi, apskatīt izsaukumu kaudzi un mainīgo saturu. Tā vienīgais trūkums ir tas, ka nav ērtas vadības saskarnes. Parasti atkļūdošanas pārvaldībai izmanto IDE. Taču IDE nevar norādīt atkļūdošanas programmai sākt atkļūdošanu, jo tā ir atbildīga tikai par kodu. Šim nolūkam ir nepieciešams Debug Helper pārlūkprogrammas paplašinājums, ar kura palīdzību var ieslēgt atkļūdošanas režīmu.

Vispirms ir jāinstalē Xdebug. Lai to izdarītu, izpildiet:

$ sudo apt install xdebug

Kad Xdebug instalēšanas process ir pabeigts, jums jākonfigurē programma tā, lai, uzsākot atkļūdošanas sesiju, tā mēģinātu izveidot savienojumu ar mūsu IDE atkļūdošanas kontrolei. Lai to izdarītu, Xdebug 2 versijas failā /etc/php/7.4/apache2/conf.d/20-xdebug.ini pievienojiet šīs rindiņas:

$ 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

Jaunākai versijai vislabāk ir izmantot citu formātu:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = 127.0.0.1
xdebug.client_port = 9000

Aplūkosim sīkāk iestatījumus. Pirmais parametrs xdebug.mode - atkļūdošanas režīms, iespējamās opcijas ir:

  • var_dump - ļauj izvadīt papildu informāciju, aizstāj var_dump;

  • atkļūdošana (debug) - rindas pa rindiņai koda izpildes režīms, tas ir režīms, kas mums šajā gadījumā ir nepieciešams;

  • profile - profilēšana;

  • trace - programmas izpildesizsekošana.

Vairāki režīmi ir iespējoti vienlaicīgi, ja tie ir uzskaitīti ar komatiem. Otrajā rindā xdebug.start_with_request ir noteikts, kā tiks palaists atkļūdošanas programma atkļūdošanas, izsekošanas un līdzīgos režīmos:

  • jā - vienmēr, kad tiek palaisti php skripti;
  • nē - palaist tikai no koda, izmantojot īpašas funkcijas;
  • trigger - pēc pieprasījuma, izmantojot īpašu mainīgo $_ENV, $_POST, $COOKIE vai citu masīvu. Šī opcija vislabāk der šajā gadījumā, lai atkļūdošanas programma netiktu palaista, kad tas nav nepieciešams.

Trešais xdebug.discover_client_host ir iestatīts uz true, un šajā gadījumā xdebug mēģina izveidot savienojumu ar HTTP_X_FORWARDED_FOR galvenē norādīto hostu. Tā kā resursdators ir norādīts nākamajā rindā, šī funkcija šajā gadījumā nav nepieciešama. Tālāk klienta resursdators, ar kuru izveidots savienojums atkļūdošanas kontrolei, ir 127.0.0.0.1 un ports 9000. Tas ir noklusējuma ports, kas pašlaik tiek izmantots PhpStorm. Pēc iestatījumu saglabāšanas ir jāpārstartē Apache, izmantojot īpašu komandu:

$ sudo systemctl restart apache2

Tālāk jākonfigurē PhpStorm. Palaidiet programmu un atveriet izvēlni Run -> Edit Configurations (Palaist -> Rediģēt konfigurācijas). Parādīsies logs, kurā jākonfigurē atkļūdošanas programma.

Настраиваем XDEBUG в PHPSTORM

Nospiediet pogu + un atveramajā sarakstā izvēlieties PHP Remote Debugger:

НАСТРОЙКА XDEBUG В PHPSTORM

Iestatījumos neko nemainiet, tikai norādiet šīs atkļūdošanas metodes nosaukumu. Ja nenorādīsiet serveri, no kura tiks gaidīti savienojumi, tiks pieņemti visi savienojumi.

Настраиваем XDEBUG в PHPSTORM

Ja vēlaties mainīt portu, ar kuru Xdebug veidos savienojumu, atveriet File -> Settings -> PHP -> Debug -> DBGp Proxy. Šeit varat norādīt vēlamo portu.

Настраиваем XDEBUG в PHPSTORM

Var teikt, ka tagad IDE ir gatava. Tagad noklikšķiniet uz kļūdas augšējā rīkjoslā. Programma sāks gaidīt, kad atkļūdošanas programma izveidos savienojumu, un mēs ievietosim dažus pārtraukuma punktus kodā, vienkārši noklikšķinot uz rindas ar kodu priekšā:

Настраиваем XDEBUG в PHPSTORM

Tagad atliek tikai konfigurēt pārlūkprogrammu.Pārlūkprogrammai Chrome varat lejupielādēt īpašu paplašinājumu. Instalējiet to un atveriet lapu, kuru vēlaties atkļūdošanas nolūkā. Noklikšķiniet uz paplašinājuma ikonas un atlasiet Debug. Paplašinājuma ikona kļūs zaļa:

Настраиваем XDEBUG в PHPSTORM

Atjauniniet lapu un atgriezieties PHPStorm. Ja viss ir izdarīts pareizi, tur sāksies atkļūdošanas sesija. Pirmajā palaišanas reizē programma var lūgt konfigurēt vietējo failu ceļus, lai tie atbilstu attālināto failu ceļiem. Vietējam serverim šeit nekas nav jākonfigurē, vienkārši noklikšķiniet uz Accept (Pieņemt):

Настраиваем XDEBUG в PHPSTORM

Pēc tam atkļūdošanas programma apturēs izpildi izvēlētajā pārtraukuma punktā un programmā parādīsies atkļūdošanas saskarne:

Настраиваем XDEBUG в PHPSTORM

Tagad sapratīsim, kā konfigurēt Xdebug PhpStorm un Docker.

PHP atkļūdošana programmā DOCKER

Docker var būt nedaudz sarežģīts. Tā kā atkļūdošanas programmai ir jāsavienojas ar pašu IDE, jums ir jāpārsūta resursdators uz konteineru. Operētājsistēmā Windows to var izdarīt, izmantojot adresi host.docker.internal. Bet Linux sistēmā tas nenotiek pēc noklusējuma. Lai pievienotu šādu adresi, docker-compose ir jāpievieno šādas rindas:

extra_hosts:

host.docker.internal: host-gateway

Mēs izmantojam šādu direktoriju struktūru:

Настраиваем XDEBUG в PHPSTORM

Minimālais nepieciešamais docker-compose.yaml izskatās šādi:

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

Mēs vienkārši deklarējam divus konteinerus - nginx un php-fpm. Pirmajā neveicam nekādas izmaiņas, tāpēc varam vienkārši paņemt oficiālo attēlu, pievienot avota mapi, konfigurācijas failu un pārsūtīt portu. Otrajā konteinerā ir nepieciešams instalēt un konfigurēt Xdebug, tāpēc tas būs jābūvē, pamatojoties uz oficiālo php konteineru. Tam pašam konteineram ir jānorāda extra_hosts direktīva, bez tās nekas nedarbosies. Nginx konfigurācija arī ir diezgan standarta:

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;
  }
}

Šādā veidā konfigurē PHP skriptu apstrādi php-fpm konteinerā un neeksistējošu URL pāradresē uz index.php, kas ir diezgan standarta risinājums daudzos karkasos un CMS. php-fpm konteinera Docker failā tas izskatās šādi:

Instalējiet xdebug, izmantojot pecl, un pēc tam nokopējiet tā konfigurācijas failu konteinerā. Failu:

xdebug.mode=debug
xdebug.start_with_request=trigger
xdebug.discover_client_host = false
xdebug.client_host = host.docker.internal
xdebug.client_port = 9000

Konteinerī ir instalēts Xdebug 3 priekš PHP 8, jo vecā versija vairs nedarbojas ar šo valodas versiju, tāpēc tiek izmantota jaunā konfigurācijas sintakse. Labi host, host.docker.internal, kas iepriekš bija noteikts docker-compose.yaml. Tagad xdebug PHPStorm docker konfigurācija ir pabeigta. Tālāk varat palaist projektu:

docker-compose up --build

Tagad, tāpat kā iepriekšējā variantā, jūs varat ieslēgt atkļūdošanas režīmu pārlūkprogrammā, atsvaidzināt lapu, un atkļūdošanas programma veiksmīgi izveidos savienojumu ar IDE, neskatoties uz to, ka tā darbojas Docker vidē.

Настраиваем XDEBUG в PHPSTORM