Почему PHPDebug в VScode не видит локальный сайт на Docker

87
29 марта 2021, 22:40

Развернул сайт на Docker, но не могу сконнектить IDE VSCode c моим PHP сервером. Посмотрел кучу мануалов, но даже не знаю где посмотреть ошибки от этого соединения. Debug Colsole пустая

В phpinfo(видно, что Xdebug включен, видны его параметры, 9000 порт и тд)

В моем Dockerfile:

pecl install xdebug
RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=true" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=true" >> /usr/local/etc/php/conf.d/xdebug.ini

VS CODE

{
    // Используйте IntelliSense, чтобы узнать о возможных атрибутах.
    // Наведите указатель мыши, чтобы просмотреть описания существующих атрибутов.
    // Для получения дополнительной информации посетите: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [

        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000,
            "hostname": "::"
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}
Answer 1

Вы имели в виду Xdebug, очевидно, когда писали про PHPDebug. Из заголовка это не очень понятно, можно подумать что речь идет о Phpdbg

Дальше нужно отметить что очень грубо говоря - xdebug шлет на удаленную машину некую информацию по некому протоколу. Удаленная машина в нашем случаея является как раз ваша IDE, а значит наша задача сделать так, чтобы с хоста где крутится у вас PHP на хост с вашей IDE попала нужная информация на определенный порт.

Еще чуть чуть дальше - В xdebug есть настройки, в частности вот xdebug.remote_host . В силу того что по-умолчанию все идет на порт 9000 , то мы настройки порта не трогаем без необходимости, а вот значение remote_host по-умолчанию это localhost, обратите на это внимание.

Ну и теперь давайте соберем все воедино.

Когда вы запускаете Docker то с точки зрения докер контейнера localhost это сам контейнер, т.е. xdebug в этом случае пытается отправить данные самому контейнеру (localhost:9000) что в нашем случае не верно. Почему не верно, спросите Вы, а потом что когда вы запускаете контейнер, то хост, на котором запущен сам Docker и соответственно все запущеные контейнеры (а так же на нем находится ваша IDE) с точки зрения контейнеров по-умолчанию будет скорее всего иметь адрес 172.17.0.1 . Этот адрес вам и нужно прописать в remote_host настроек Xdebug (ну или тот адрес который конкретно у вас ).

Так же меня немного смущает настройка в вашем IDE "hostname": "::" не ограничивает ли она ваш хост только ipv6 адресами, но скорее всего нет, однако если не заработает то нужно будет и сюда внимание обратить.

Ну в общем в сухом остатке - добавьте/замените xdebug.remote_host=172.17.0.1

p.s. так же есть настройки xdebug.idekey обратите на нее тоже внимание.

updt. А вот тут собственно уже это обсуждалось.

READ ALSO
Авторизация на Laravel через сторонние API

Авторизация на Laravel через сторонние API

Есть сайт на Laravel, и есть API, которые расположены на другом сервере, они выполняют все функции ЛК от регистрации до пополнения баланса и прочими...

122
Ошибка при загрузке файлов Yii2:Call to undefined method UploadForm::formName()

Ошибка при загрузке файлов Yii2:Call to undefined method UploadForm::formName()

Я использую виджет kartik yii2-widget-fileinputВо вью вставил следующий код:

105
В чем заключается ошибка

В чем заключается ошибка

Выдает ошибку:

115
Код php для добавления значений таблице в mysql

Код php для добавления значений таблице в mysql

Код php для добавления значений таблице в mysqlНе работает добавление новых значений, запрос идет, а в результате ничего не добавляется

83