2017-01-08 2 views
0

Ich habe einen Ubuntu 16.10 Laptop, den ich zum Testen von Webseiten verwende, die ich entwickle, und ich bin kürzlich von Apache2 zu NginX gewechselt. Ich benutze Netbeans und Xdebug, um meine PHP-Skripte zu debuggen.Wie bekomme ich Netbeans und Xdebug um mit NginX zu arbeiten?

Anweisungen zum Einrichten von Xdebug mit NginX schien ziemlich einfach. Einfach gesagt, die folgenden Zeilen in /etc/php/7.0/fpm/conf.d/20-xdebug.ini:

zend_extension=/usr/lib/php/20160303/xdebug.so 
xdebug.remote_port=9000 
xdebug.remote_enable=On 
xdebug.remote_connect_back=On 
xdebug.remote_log=/var/log/xdebug.log 

... dann neu starten Nginx mit sudo service nginx restart. Aber das funktioniert nicht.

Ich suchte nach Antworten auf Stack Overflow, und ich fand this one, die besagt, dass ich den folgenden Code in eine Konfigurationsdatei einfügen muss, aber es scheint spezifisch für PHP 5 zu sein und ich betreibe PHP 7.0 und auch Es bezieht sich nur auf eine NginX-Konfigurationsdatei, ohne die zu spezifizieren, also weiß ich nicht genau, wo ich es setzen soll.

location/{ 
     root /var/www/bresson/web/; 
     include fastcgi_params;  
     fastcgi_param SCRIPT_FILENAME $document_root/dispatch.php; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
    } 

Wie verbinde ich Xdebug zu nginx, so dass ich PHP mit Netbeans debuggen können?

Antwort

1

Die Antwort gefunden here.

Es sagt etwas namens „redis“ zu bekommen, obwohl ich nicht ganz sicher bin, was notwendig ist:

apt-get install php-redis 

Auf jeden Fall habe ich getan. Der nächste Schritt war, diesen Befehl auszuführen:

Alle manuellen kompilierenden Anweisungen können ignoriert werden, weil alles, was benötigt wird, jetzt in den Repositorys ist. Ich hatte bereits Xdebug, NginX und alles installiert. So übersprungen ich zu dieser Zeile:

sudo echo "zend_extension=xdebug.so" > /etc/php/7.0/mods-available/xdebug.ini 

Aber lange Geschichte kurz, fand ich durch Versuch und Irrtum, dass dies nicht genug war. Stattdessen hatte ich es zu öffnen und die folgende hinzu:

zend_extension = xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_host=localhost 
xdebug.remote_port=9000 
xdebug.var_display_max_depth = -1 
xdebug.var_display_max_children = -1 
xdebug.var_display_max_data = -1 
xdebug.idekey = "PHPSTORM" 

Danach lief ich diese Befehle:

ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/fpm/conf.d/20-xdebug.ini 
ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini 
service php7.0-fpm restart 

Überprüfen Sie die Ergebnisse von php -m | grep -i xdebug läuft, die zurückkehren sollte:

xdebug 
Xdebug 

Ich habe dann alles neu gestartet, obwohl dies möglicherweise nicht notwendig ist:

sudo service php7.0-fpm restart 
sudo service nginx restart 

Ich habe es dann getestet, indem Sie eine Website in NetBeans debuggen, und es hat funktioniert!

Nachtrag:

Ich hielt einen 503 Bad Gateway Fehler bekommen, wenn meine lokalen Standorten debuggen. Es schien das Problem zu sein, dass die Xdebug Verbindung ausging. Die Lösung scheint zu sein, die Konfigurationsdatei für die Website, die Sie debuggen, zu gehen, zum Beispiel /etc/nginx/sites-available/local_example.conf, und Sie möchten einen Parameter fastcgi_read_timeout zum PHP-Abschnitt hinzufügen.Zum Beispiel ist dies, wie es jetzt in meiner Seite sieht conf Dateien:

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php7.0-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
    fastcgi_read_timeout 600; 
} 

Ich stelle es auf fastcgi_read_timeout 600; so, dass ich 10 Minuten haben würde, um zu sitzen und darüber nachdenken, was ich tue, während hängen ein Haltepunkt Ich suchte nach einem globaleren Umfeld, konnte es aber nicht finden, also ist dies die Lösung, die jetzt für mich funktioniert.

Verwandte Themen