Ich habe alles so konfiguriert, dass PhpStorm und Xdebug funktionieren. Ich verwende Ubuntu 14.04.
die Verbindung zur IDE wird nicht hergestellt, und ich bekomme dies im Ereignisprotokoll IDE
Kann externe Xdebug-Verbindung nicht akzeptieren: Der Ausdruck 'isset ($ _ SERVER [' PHP_IDE_CONFIG '])' kann nicht ausgewertet werden - Osama Salama vor 13 Minuten
Ich werde Konfigurationswerte zusammenstellen, die ich an verschiedenen Stellen konfiguriert habe. Da ich nicht herausfinden kann, wo das Problem liegt
php.ini
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_Host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_connect_back = 1
xdebug.remote_autostart = 1
xdebug.remote_log=xxx/xdebug.log
xdebug.IDE_key=PHPSTORM
PHP-Info
xdebug
xdebug support enabled
Version 2.3.1
IDE Key PHPSTORM
Supported protocols Revision
DBGp - Common DeBuGger Protocol $Revision: 1.145 $
Directive Local Value Master Value
xdebug.auto_trace Off Off
xdebug.cli_color 0 0
xdebug.collect_assignments Off Off
xdebug.collect_includes On On
xdebug.collect_params 0 0
xdebug.collect_return Off Off
xdebug.collect_vars Off Off
xdebug.coverage_enable On On
xdebug.default_enable On On
xdebug.dump.COOKIE no value no value
xdebug.dump.ENV no value no value
xdebug.dump.FILES no value no value
xdebug.dump.GET no value no value
xdebug.dump.POST no value no value
xdebug.dump.REQUEST no value no value
xdebug.dump.SERVER no value no value
xdebug.dump.SESSION no value no value
xdebug.dump_globals On On
xdebug.dump_once On On
xdebug.dump_undefined Off Off
xdebug.extended_info On On
xdebug.file_link_format no value no value
xdebug.force_display_errors Off Off
xdebug.force_error_reporting 0 0
xdebug.halt_level 0 0
xdebug.idekey no value no value
xdebug.max_nesting_level 256 256
xdebug.max_stack_frames -1 -1
xdebug.overload_var_dump On On
xdebug.profiler_aggregate Off Off
xdebug.profiler_append Off Off
xdebug.profiler_enable Off Off
xdebug.profiler_enable_trigger Off Off
xdebug.profiler_enable_trigger_value no value no value
xdebug.profiler_output_dir /tmp /tmp
xdebug.profiler_output_name cachegrind.out.%p cachegrind.out.%p
xdebug.remote_autostart On On
xdebug.remote_connect_back On On
xdebug.remote_cookie_expire_time 3600 3600
xdebug.remote_enable On On
xdebug.remote_handler dbgp dbgp
xdebug.remote_Host 127.0.0.1 127.0.0.1
xdebug.remote_log /home/nautilus/Desktop/xdebug.log /home/nautilus/Desktop/xdebug.log
xdebug.remote_mode req req
xdebug.remote_port 9000 9000
xdebug.scream Off Off
xdebug.show_exception_trace Off Off
xdebug.show_local_vars Off Off
xdebug.show_mem_delta Off Off
xdebug.trace_enable_trigger Off Off
xdebug.trace_enable_trigger_value no value no value
xdebug.trace_format 0 0
xdebug.trace_options 0 0
xdebug.trace_output_dir /tmp /tmp
xdebug.trace_output_name trace.%c trace.%c
xdebug.var_display_max_children 128 128
xdebug.var_display_max_data 512 512
xdebug.var_display_max_depth 3 3
Ich habe auch die Remote-Debugging-Umgebung validiert. es ist alles gut.https://www.jetbrains.com/phpstorm/help/validating-the-configuration-of-a-debugging-engine.html was ebenfalls gut war.
Der letzte mögliche Ausweg ist die xdebug-Protokolldatei:
Log opened at 2015-03-13 14:39:01
I: Checking remote connect back address.
W: Remote address not found, connecting to configured address/port: 127.0.0.1:9000. :-|
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="dbgp://stdin" language="PHP" protocol_version="1.0" appid="4474"><engine version="2.3.1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2015 by Derick Rethans]]></copyright></init>
<- feature_set -i 1 -n show_hidden -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="1" feature="show_hidden" success="1"></response>
<- feature_set -i 2 -n max_depth -v 1
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="2" feature="max_depth" success="1"></response>
<- feature_set -i 3 -n max_children -v 100
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="feature_set" transaction_id="3" feature="max_children" success="1"></response>
<- status -i 4
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="status" transaction_id="4" status="starting" reason="ok"></response>
<- step_into -i 5
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="step_into" transaction_id="5" status="stopping" reason="ok"></response>
<- eval -i 6 -- aXNzZXQoJF9TRVJWRVJbJ1BIUF9JREVfQ09ORklHJ10p
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" command="eval" transaction_id="6"><error code="5"><message><![CDATA[command is not available]]></message></error></response>
Log closed at 2015-03-13 14:39:01
Ich hatte in PhpStorm genau den gleichen Fehler wie das OP.
Diese Antwort auf eine andere Frage löste das Problem für mich, aber ich möchte in meiner eigenen Antwort etwas mehr Details hinzufügen.
Das Hauptproblem war xdebug falsch geladen. Die in anderen Antworten erwähnten Server-Mapping-Probleme waren für mich kein Problem.
Wenn Sie Ihre phpinfo()
-Seite laden und den xdebug-Abschnitt finden, sehen Sie Folgendes:
XDEBUG wurde nicht als ZEND EXTENSION geladen
Dann müssen Sie das beheben, bevor Sie etwas anderes ausprobieren! Manchmal kann dies jedoch einige Arbeit erfordern, wenn Sie mehrere php.ini
-Dateien haben.
Suchen Sie auch auf der Seite phpinfo()
nach "php.ini" (sie sollte sich ganz oben befinden) und sehen Sie den Pfad "Konfigurationsdatei (php.ini)" und Ihre "geladene Konfigurationsdatei". Hier kann Ihr xdebug geladen werden.
In meinem Fall habe ich es korrekt als Zend-Erweiterung in meine Hauptkonfigurationsdatei in /usr/local/lib/php.ini geladen, wie folgt:
zend_extension = "/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
Aber in meiner Loaded-Konfigurationsdatei in /home/someuser/public_html/php.ini hatte ich es falsch geladen:
extension=xdebug.so
Nachdem ich das behoben habe, funktioniert das Remote-Debugging mit PhpStorm wieder für mich.
Als Randbemerkung war der erste Fehler, den ich in PhpStorm sah, genau derselbe, den das OP erwähnt, und hier sieht es so aus:
Cannot accept external Xdebug connection
Cannot evaluate expression 'isset($_SERVER['PHP_IDE_CONFIG'])'
(Zuerst dachte ich, dass PhpStorm den PHP Code auf dem Server nicht ausführen konnte, da die Erweiterung nicht ordnungsgemäß geladen wurde. Aber jetzt denke ich, dass PhpStorm PHP-Code nur ausführt, wenn Sie einen Interpreter konfiguriert haben, was nicht der Fall ist zum Debuggen erforderlich. Zum Debuggen benötigt PhpStorm nur die xdebug-Verbindung und die richtigen Pfadzuordnungen.)
Später fand ich den Fehler "Befehl ist nicht verfügbar" im xdebug-Protokoll auf meinem Server, was mich zur Lösung führte.
Folgendes habe ich übrigens in meinem lokalen php.ini
für xdebug:
;extension=xdebug.so <- this is the bad line commented!
zend_extension = "/usr/local/lib/php/extensions/no-debug-non-zts-20121212/xdebug.so"
xdebug.remote_enable=true
xdebug.remote_port="9000"
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/tmp/xdebug-someuser/"
xdebug.profile_enable_trigger=1
xdebug.trace_enable_trigger=1
xdebug.idekey="PHPSTORM"
xdebug.remote_log="var/log/xdebug/xlog"
Ich hatte kürzlich das gleiche Problem beim Debuggen mit PHPStorm
unter nginx
und php-fpm
. In meinem Fall war dies nicht mit xdebug
, nginx
oder php-fpm config
verbunden, es fehlten die Pfadzuordnungen in phpstorm
.
Anfangs wird PHPStorm
Sie benachrichtigen, wenn eine Datei auf dem Server keiner lokalen Quelldatei zugeordnet werden kann, jedoch eine Zuordnung zu dem ersten Treffer der Datei (normalerweise index.php
oder einem ähnlichen Code), jedoch keine später verwendete Datei (in In diesem Fall war dies der Autoloader im Herstellerverzeichnis eines Projekts, das Composer verwendet.) PHPStorm
kann dann nicht mehr debuggen, und das Debugging wird angehalten.
Um dies in PHPStorm
zu korrigieren, gehen Sie zu settings/Languages & Frameworks/PHP/Servers
und stellen Sie sicher, dass der Stamm Ihres Projekts dem zugehörigen Verzeichnis auf dem Server korrekt zugeordnet ist.
PHPStorm
sollte dann in der Lage sein, alle Dateien in Ihrem Projekt zuzuordnen, und das Debugging sollte fortgesetzt werden.
Ich hoffe das hilft.
Für alle anderen Benutzer, die an diesem Problem teilnehmen, gibt es eine weitere mögliche Konfigurationsoption, die möglicherweise fehlt.
Stellen Sie sicher, dass Sie Ihren Server richtig konfiguriert haben, um die richtige Pfadzuordnung zwischen Ihren lokalen und Remote-Dateien zu verwenden.
Wenn Ihr Site-Root beispielsweise lokal unter /home/foo/www/mysite
bereitgestellt ist, aber auf dem Server unter /www/mysite
installiert ist, müssen Sie Ihre Serverkonfiguration in PHPStorm bearbeiten, um Pfadzuordnungen zu verwenden (geben Sie einfach /www/mysite
in das Feld neben /home/foo/www/mysite
ein).
Auch derselbe Fehler, wenn Sie die Umgebungsvariable in docker-compose.yml
für Ihre Arbeitsbereichskonfiguration nicht festgelegt haben:
workspace:
build:
environment:
- PHP_IDE_CONFIG=${PHP_IDE_CONFIG}
Debuggen einer Datei mit dem Namen «test.php» in IntelliJ IDEA/PhpStorm kann dazu führen zum Fehler "Kann den Ausdruck" isset($_SERVER['PHP_IDE_CONFIG'])
"" nicht auswerten.
Verwenden Sie einen anderen Namen für die Datei.
Ich hatte auch dieses Problem und versuchte jeden Trick, den ich finden konnte, aber nichts funktionierte. Für mich funktioniert das Debuggen meistens, aber manchmal hört es einfach mit der Meldung auf: "Externe Xdebug-Verbindung kann nicht akzeptiert werden: Der Ausdruck 'isset ($ _ SERVER [' PHP_IDE_CONFIG '])'" kann nicht ausgewertet werden.
So wurde mir schließlich klar, dass ich einen Kompilierungsfehler in meinem Code hatte (falsch geschriebener Methodenname - PhpStorm meldet diese Dinge nicht immer, zumindest in meinem Setup). Sobald ich den Fehler behoben habe, funktionierte das Debugging wieder. Vielleicht kann dies jemandem helfen, der zu kämpfen hat.
Obwohl ich immer noch Probleme damit habe, dass Haltepunkte nicht getroffen werden, kann ich ein "xdebug_break ();" Zeile im Code und Debugging wird zuverlässiger. Der Nachteil bei der Verwendung von xdebug_break anstelle von Haltepunkten ist (abgesehen von der Tatsache, dass mehr Arbeit als das Hinzufügen eines Haltepunkts erforderlich ist), dass die lokalen Variablen aus irgendeinem Grund nicht im PhpStorm-Debugger angezeigt werden (nur Globals werden angezeigt). Das macht das Debuggen weniger bequem, aber zumindest kann ich es funktionieren lassen.
Anscheinend können Sie nicht alles haben:) Aus der Java-Welt kommend, ist gutes Debuggen nur etwas, das ich als selbstverständlich betrachten konnte, aber ich habe jetzt gemerkt, wie verwöhnt ich war :)
Eine andere Sache ist, sicherzustellen, dass Sie Ihre Firewall deaktivieren und welche Remoteverbindungen blockiert.