Ödeme Yöntemleri Abuse

PHPStorm'da Xdebug'ı Yapılandırma

07.05.2021, 22:28

Hata ayıklama, programlamadaki en önemli süreçlerden biridir. Bir hata ayıklayıcı yardımıyla programda neler olduğunu, hangi işlevlerin yürütüldüğünü, değişkenlerde nelerin depolandığını görebilir, her şeyi adım adım yürütebilir ve tam olarak hangi satırda ve değişkenlerin hangi değerlerinde bir hata oluştuğunu anlayabilirsiniz.

Örneğin, Xdebug hata ayıklayıcı PHP için kullanılır, PHPStorm en popüler geliştirme ortamlarından biridir. Şimdi yerel bilgisayarda ve Docker'da hata ayıklama için PhpStorm'da Xdebug'ın nasıl yapılandırılacağını görelim.

PHPSTORM'da XDEBUG Yapılandırma

Şimdi yerel sunucuda hata ayıklamanın nasıl yapıldığından bahsedelim.

Örnek olarak Ubuntu ve Apache ile yapılandırılmış PHP yorumlayıcısını kullanarak tüm sürece bakalım. Diğer yapılandırmalar için dosya yolları farklı olabilir, ancak konu aynıdır. Xdebug hata ayıklayıcısı kod yürütmeyi duraklatmanıza, çağrı yığınını ve değişkenlerin içeriğini görüntülemenize olanak tanır. Tek dezavantajı uygun bir kontrol arayüzünün olmamasıdır. IDE'ler genellikle hata ayıklamayı yönetmek için kullanılır. Ancak IDE hata ayıklayıcıya hata ayıklamaya başlamasını söyleyemez çünkü sadece koddan sorumludur. Bu amaçla, hata ayıklama modunu etkinleştirebileceğiniz Debug Helper tarayıcı uzantısına ihtiyacınız olacaktır.

Öncelikle Xdebug'ı yüklemeniz gerekir. Bunu yapmak için çalıştırın:

$ sudo apt install xdebug

Xdebug yükleme işlemi tamamlandıktan sonra, programı bir hata ayıklama oturumu başlattığınızda hata ayıklamayı kontrol etmek için IDE'mize bağlanmaya çalışacak şekilde yapılandırmalısınız. Bunu yapmak için, Xdebug 2 sürümünde /etc/php/7.4/apache2/conf.d/20-xdebug.ini dosyasına bu satırları ekleyin:

$ 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

Daha yeni bir sürüm için farklı bir format kullanmak en iyisidir:

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

Şimdi ayarlara daha yakından bakalım. İlk parametre xdebug.mode - hata ayıklama modu, olası seçenekler şunlardır:

  • develop - ek bilgi çıktısını etkinleştirir, var_dump'ı geçersiz kılar;

  • debug - satır satır kod yürütme modu, bu durumda ihtiyacımız olan mod budur;

  • profile - profil oluşturma;

  • trace - program yürütmesininizlenmesi.

Virgül içinde listelendiğinde birkaç mod aynı anda etkinleştirilir. İkinci satır xdebug.start_with_request hata ayıklama, izleme ve benzer modlar için hata ayıklayıcının nasıl başlatılacağını tanımlar:

  • yes - php betiklerini çalıştırırken her zaman;
  • no - sadece özel fonksiyonlar kullanılarak koddan başlatılır;
  • trigger - istek üzerine, $_ENV, $_POST, $COOKIE veya başka bir dizi içinde özel bir değişken kullanarak. Bu seçenek, hata ayıklayıcının gerekli olmadığında çalışmaması için bu durumda en uygun seçenektir.

Üçüncü xdebug.discover_client_host true olarak ayarlanır, bu durumda xdebug HTTP_X_FORWARDED_FOR başlığında geçen ana bilgisayara bağlanmaya çalışır. Ana bilgisayar bir sonraki satırda belirtildiğinden, bu durumda bu özelliğe gerek yoktur. Ardından, hata ayıklama kontrolü için bağlanılacak istemci ana bilgisayarı 127.0.0.1 ve bağlantı noktası 9000'dir. Bu şu anda PhpStorm'da kullanılan varsayılan porttur. Ayarları kaydettikten sonra, özel bir komut kullanarak Apache'yi yeniden başlatmanız gerekir:

$ sudo systemctl restart apache2

Daha sonra, PhpStorm'u yapılandırmalısınız. Programı çalıştırın, ardından Çalıştır -> Yapılandırmaları Düzenle menüsünü açın. Hata ayıklayıcıyı yapılandırmanız gereken bir pencere göreceksiniz.

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

düğmesine tıklayın ve açılan listeden PHP Remote Debugger'ı seçin:

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

Ayarlarda herhangi bir değişiklik yapmayın, sadece bu hata ayıklama yönteminin adını belirtin. Hangi sunucudan bağlantı bekleneceğini belirtmezseniz, tüm bağlantılar kabul edilecektir.

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

Xdebug'ın bağlanacağı portu değiştirmek istiyorsanız, Dosya -> Ayarlar -> PHP -> Hata Ayıklama -> DBGp Proxy'yi açın. Burada istediğiniz portu belirtebilirsiniz.

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

Artık IDE'nin hazır olduğunu söyleyebiliriz. Şimdi üst araç çubuğundaki hataya tıklayın. Program hata ayıklayıcının bağlanmasını beklemeye başlayacak ve biz de kodun bulunduğu satırın önüne tıklayarak koda bazı kesme noktaları koyacağız:

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

Şimdi geriye kalan tek şey tarayıcıyı yapılandırmak.Chrome için özel bir uzantı indirebilirsiniz. Yükleyin ve hata ayıklamak istediğiniz sayfayı açın. Uzantı simgesine tıklayın ve Hata Ayıkla'yı seçin. Uzantı simgesi yeşile dönecektir:

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

Sayfayı yenileyin ve PHPStorm'a geri dönün. Her şey doğru yapıldıysa, orada bir hata ayıklama oturumu başlayacaktır. İlk çalıştırmada, program sizden yerel dosya yollarını uzak dosya yollarıyla eşleşecek şekilde yapılandırmanızı isteyebilir. Yerel sunucu için burada herhangi bir yapılandırma yapmanıza gerek yoktur, sadece Kabul Et'e tıklayın:

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

Bundan sonra hata ayıklayıcı seçilen kesme noktasında yürütmeyi durduracak ve hata ayıklama arayüzü programda görünecektir:

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

Şimdi Xdebug PhpStorm ve Docker'ın nasıl yapılandırılacağını anlayalım.

DOCKER'da PHP Hata Ayıklama

Docker biraz zor olabilir. Hata ayıklayıcının IDE'nin kendisine bağlanması gerektiğinden, ana bilgisayarı konteynere yönlendirmeniz gerekir. Windows'ta bu, host.docker.internal adresi kullanılarak yapılabilir. Ancak Linux'ta bu varsayılan olarak gerçekleşmez. Böyle bir adres eklemek için docker-compose'a aşağıdaki satırları eklemeniz gerekir:

extra_hosts:

host.docker.internal: host-gateway

Aşağıdaki dizin yapısını kullanıyoruz:

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

Minimum gerekli docker-compose.yaml aşağıdaki gibi görünecektir:

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

Basitçe iki konteyner bildiriyoruz, nginx ve php-fpm. Birincisinde herhangi bir değişiklik yapmıyoruz, bu yüzden sadece resmi imajı alabilir, kaynak klasörünü, yapılandırma dosyasını ve bağlantı noktasını iletebiliriz. İkinci kapsayıcıda Xdebug'ı kurmak ve yapılandırmak gerekir, bu nedenle resmi php kapsayıcısı temelinde inşa edilmesi gerekecektir. Aynı konteyner için extra_hosts direktifini belirtmek gerekir, bu olmadan hiçbir şey çalışmayacaktır. Nginx yapılandırması da oldukça standarttır:

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 betiklerinin php-fpm konteynerinde işlenmesini bu şekilde yapılandırırsınız ve var olmayan URL'leri index.php'ye yönlendirirsiniz, bu da birçok çerçeve ve CMS için oldukça standarttır. php-fpm konteynerinin Dockerfile'ında şu şekilde görünür:

pecl kullanarak xdebug'ı yükleyin ve ardından yapılandırma dosyasını konteynere kopyalayın. Dosya:

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

PHP 8 için Xdebug 3 konteynere yüklenir, çünkü eski sürüm artık dilin bu sürümüyle çalışmaz, bu nedenle yeni yapılandırma sözdizimi kullanılır. Eskiden docker-compose.yaml dosyasında belirtilen host, host.docker.internal. xdebug PHPStorm docker yapılandırması artık tamamlandı. Ardından, projeyi çalıştırabilirsiniz:

docker-compose up --build

Şimdi, önceki seçenekte olduğu gibi tarayıcıda hata ayıklama modunu etkinleştirebilir, sayfayı yenileyebilir ve Docker'da çalışıyor olmasına rağmen hata ayıklayıcı IDE'ye başarıyla bağlanacaktır

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