Local ist derzeit das Tool meiner Wahl wenn es um die lokale Entwicklungsumgebung geht. Was ist allerdings, wenn man den XDebug Profiler benötigt und man von NGINX nur den Fehler 504 zurückbekommt? Hier ist die Lösung.
Das Problem ist, dass nginx bzw. PHP abbricht, wenn eine bestimmte Scriptlaufzeit überschritten ist. Da das Profiling aber sehr lange dauern kann, ist es gut, dass man (lokal) die maximale Ausführungszeit erhöht. Und das geht so:
1. a) php.ini anpassen: max_execution_time
Man öffnet die php.ini.hbs
aus einem Local-Verzeichnis, z.B.: die Datei app/conf/php/php.ini.hbs
und setzt dann
max_execution_time = 1000 # 1000 = ca. 16.6 Minuten.
1. b) php.ini anpassen: xdebug einstellen
Zusätzlich sollte man folgendes einfügen. Achtung: xdebug.remote_host
muss auf die Domain zeigen, die gewählt wurde. Bei mir ist das meist der-domain-name.dev.
[Xdebug]
zend_extension = /opt/php/7.0.3/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_connect_back=On
xdebug.remote_port="9000"
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger = 1; # browser trigger
xdebug.remote_host=der-hostname.dev
xdebug.profiler_output_dir = /var/log/php/profiler/
Danach sollte man noch das Verzeichnis /logs/php/profiler/
anlegen.
2. php-fpm Konfiguration anpassen
Im Verzeichnis /conf/php/7.0.3/etc/php-fpm.d/
findet man die Datei www.conf.hbs
. Dort kommentiert man nachfolgende Zeile aus und passt sie an:
request_terminate_timeout = 1000
Der Grund: dieser Wert sollte auf den gleichen Wert wie max_execution_time
aus der php.ini eingestellt sein.
3. Fastcgi-Read-Timeout
Nun öffnet man noch die Datei conf/nginx/site.conf.hbs
und hängt folgende Zeile am Ende an oder kommentiert sie aus (falls noch nicht geschehen):
fastcgi_read_timeout 1200;
Ansonsten würde der Fast-CGI-Prozess vorher schlapp machen.
4. Profiling starten
Da wir XDEBUG im Schritt 1b) so eingestellt haben, dass es auf Browser-Cookies reagiert (xdebug.profiler_enable_trigger = 1;
) brauchen wir nur ein Cookie anlegen und dann die entsprechende Seite reloaden. Das klappt am besten mit den XDebug Helper Plugins von Jetbrains, die man sich hier anlegen kann.
5. Profile untersuchen
Nun bekommen wir Profiler-Dateien im Verzeichnis logs/php/profiler/
angezeigt. Diese können wir z.B. mit PHPStorm auslesen und untersuchen. Der Menüpunkt dazu befindet sich unter Tools -> Analyze Xdebug Profiler Snapshot.
Das war’s.
PS: NGINX/PHP-FPM Neustart nicht vergessen!