我正在尝试将我的 Magento 开发环境迁移到 docker。我已经从 this 准备使用解决方案开始。除了 xdebug 之外,几乎所有东西都可以正常工作。
我已经根据本教程设置了 PhpStorm,并且我已将本地项目目录正确映射到服务器部分的 docker 卷上。当我尝试开始调试时,调试器窗口中会出现此消息
在本地找不到文件“/var/www/html/pub/index.php”。 要修复它,请通过环境变量 PHP_IDE_CONFIG 设置服务器名称并重新启动调试会话。
我已经添加了这个
environment:
- PHP_IDE_CONFIG=serverName=Magetwo
到php部分的
docker-compose.yml
,但仍然是同样的错误。仅当我的项目位于主机上的同一目录(如容器卷中)中时,调试才有效,但我想要不同的目录。
我应该改变什么来强制 xdebug 工作?
尝试使用 docker 在 PHPStorm 上进行调试时,也会出现同样的问题。
您可以通过在 nginx 配置中添加
server_name
来解决它:
server_name _;
应设置为 _
,这是默认服务器名称。您还可以添加 另一个 服务器名称,从而导致 PhpStorm 添加一个新的 PHP 服务器(设置:PHP > 服务器)并将其用作 Name
: server_name _ MyProject;
server {
listen 80;
### Add the following line to nginx config file ###
server_name _ AnotherServerNameForPhpStorm;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app_bug:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
include xdebug/remote.conf;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
希望这可以帮助那些和我有同样问题的人
我通常将 docker 子网 IP 设置为远程主机 ip,如下所示:
XDEBUG_CONFIG=remote_host=172.17.0.1
PHP_IDE_CONFIG=serverName=your_server_name_in_phpstorm_settings
您可以使用以下命令在 Linux 中检查 ip:
ifconfig docker0
此外,如果您使用 docker-compose,您可以将 xdebug 变量定义移动到单独的 .env 文件并将其链接到 docker-compose.yml 中的容器配置:
container_name:
...
env_file: .env
...
...
请在 docker-compose.yaml 中为您的应用程序容器添加此代码
environment:
- XDEBUG_CONFIG=idekey=PHPSTORM
- PHP_IDE_CONFIG=serverName=name_of_yours_host_in_phpstorm
示例:
environment:
- XDEBUG_CONFIG=idekey=PHPSTORM
- PHP_IDE_CONFIG=serverName=localhost
另外。 php.ini 文件中的 xdebug 设置:
zend_extension=xdebug.so
xdebug.default_enable = On
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=yes
xdebug.log="/path/in/your/project/to/xdebug.log"
并在 docker-compose.yaml 中为您的应用程序容器添加此代码
volumes:
- ./path/in/your/project/to/php.ini:/usr/local/etc/php/php.ini
`这对我有用
我也面临同样的问题 尝试在 xdebug 配置中添加这一行:
xdebug.extended_info = 1
应该将环境变量传递给$_SERVER
我有一个类似的问题,相同的“要修复它,请通过环境变量 PHP_IDE_CONFIG 设置服务器名称并重新启动调试会话。”
最终为我解决的是设置 $_ENV['PHP_IDE_CONFIG'] 。当你收到此消息时检查你的 $_ENV,我敢打赌你不会有一个名为“PHP_IDE_CONFIG”的密钥。
我们如何获得这套套装? 首先确保容器中有一个名为 PHP_IDE_CONFIG 的环境变量。如果你不这样做,那就得到那一套。我个人使用一个文件来定义我的环境变量。请参阅 https://docs.docker.com/compose/environment-variables/#set-environment-variables-in-containers 并搜索“env_file”。
将环境变量放入容器后,它仍然无法正常工作,然后尝试以下操作: 转到“视图”>“工具窗口”>“Docker”。然后单击编辑配置(它是一个图标)。在那里,确保您已连接到 Docker 并且您有虚拟机路径到本地路径的映射。
除此之外,我还使用Oleg的答案来设置
xdebug.extended_info=1
尽管这本身并没有解决我的问题,但我正在使用此设置。
我也遇到了同样的问题,因为映射不正确。就我而言,我在标准 PHP 镜像的 docker 容器中使用 Laravel。 XDebug 已在 Dockerfile 中安装并启用:
RUN pecl install xdebug \
&& docker-php-ext-enable xdebug
我用于调试的配置是:
zend_extension=xdebug
[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.extended_info = 1
我忽略的重要一点是 Laravel 的起点位于 Public/index.php 中,并且它是自动映射的,而项目根目录需要手动映射。为此,请转到 PHP Storm 设置,在 PHP 部分中,打开调试部分并添加服务器(可能已自动添加)。确保端口设置正确。然后在映射部分,在项目路由路径前面,添加您机器上的绝对路径。
值得一提的是,如果您想查看 XDebug 在诊断日志中所说的内容,您可以在 PHP 代码中使用以下函数:
xdebug_info();