Подтвердить что ты не робот

Как отладить php artisan в PHPStorm?

Я использую PHPStorm для разработки моих веб-страниц PHP. Все отлично работают с моим Apache Server, XDebug и простым веб-проектом PHP. Нет проблем.

Но когда я пытаюсь отлаживать веб-проект Laravel 5.1 с помощью php artisan serve, я не могу отлаживать точки останова. Это как php artisan serve использовать другой сервер...

И на моем PHPStorm я всегда вижу:

Ожидание входящего соединения с ключом ide (randomNumberHere) '

Я настроил все в PHPStorm (включив удаленный отладочный, правильный порт и т.д.), а с "нормальными" PHP-проектами все работает нормально.

Может ли кто-нибудь сказать мне, нужно ли что-то изменить?

Спасибо!

4b9b3361

Ответ 1

Отладка с использованием php artisan serve не работает, если вы не включили отладку в INI файле.

@Богдан указал на причину. artisan serve вызовет встроенный веб-сервер PHP, но не передает параметры командной строки php (именованные параметры интерпретатора в PHPStorm).

т.е. если вы выполняете из командной строки:

$ php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1 artisan serve

Затем эти параметры, заданные -d, не передаются на встроенный веб-сервер PHP. Вы можете увидеть вызов встроенного сервера здесь.

Обходной путь в PHPStorm заключается в создании конфигурации Run, которая напрямую вызывает встроенный веб-сервер PHP. Инструкции:

  1. Откройте Run → Изменить настройки...
  2. Создайте новый встроенный веб-сервер PHP
  3. Установить значения:

    • Ведущий: localhost
    • Порт: 8000
    • Корень документа: выберите публичный каталог Laravel
    • Проверьте Use route script и выберите server.php в корневом каталоге проектов Laravel.
    • Варианты переводчика: -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=127.0.0.1
  4. ОК и беги.

Теперь PHPStorm выполнит ту же команду, что и php artisan serve, с дополнительными опциями интерпретатора. На самом деле единственной целью php artisan serve является добавление server.php к встроенному веб-серверу PHP. server.php просто эмулирует функциональность Apache mod_rewrite.

Обновление: Хорошее напоминание от @attila-szeremi: убедитесь, что включена опция "Начать прослушивание PHP-отладочных соединений", что вам нужно сделать вручную, если вы не запускаете конфигурацию PhpStorm с "Отладкой"

Ответ 2

Я не использую phpstorm, но, возможно, решение, которое я использую для отладки в netbeans, окажется полезным.

Сервис artisan использует другой файл ini из загруженного веб-контейнером

Найдите это, набрав

php --ini

В моем поле ubuntu оно расположено в

Loaded Configuration File:         /etc/php/7.0/cli/php.ini

Отредактируйте ini для своей среды cli и используйте ту же конфигурацию, которую вы использовали для ее включения в свой веб-контейнер;

Пример...

[Zend]
zend_extension=/usr/lib/php/20151012/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

Единственное предостережение в этом заключается в том, что до тех пор, пока вы настроите эту настройку, это повлияет на другие вещи, которые вы используете для php cli.

Дополнительная заметка

Если вы хотите, чтобы ваш отладочный сеанс всегда запускался автоматически (вместо запуска удаленного отладки через параметр URL-адреса XDEBUG_SESSION_START = name, например, при отладке содержимого CLI), вы можете установить XDEBUG для начала сеанса удаленной отладки с помощью этого дополнительная конфигурация;

xdebug.remote_autostart = 1

См. https://xdebug.org/docs/all

Обычно для запуска удаленной отладки (см. Удаленная отладка) вам необходимо использовать определенную переменную HTTP GET/POST. Когда этот параметр установлен в 1, Xdebug всегда будет пытаться запустить сеанс удаленной отладки и попытаться подключиться к клиенту, даже если переменная GET/POST/COOKIE отсутствовала.

Ответ 3

Итак, пройдя через Jeffry Be Awesome в PhpStorm, я оказался в аналогичной ситуации с OP (в главе, посвященной Xdebug и Laravel). Я настраивал точки останова, но PhpStorm не смог сломать выполнение в соответствии с этими точками. И, честно говоря, Джош ответил здесь несколько помог мне разобраться в проблеме, но для меня это было недостаточно ясно. Итак, я вышел и нашел решение самостоятельно методом хитов и пробных версий, окончательным решением которого я хочу поделиться. Может быть, это будет полезно для некоторых людей, которые все еще задаются вопросом.

Во-первых, поскольку OP сказал/догадался, php artisan server использует другой сервер. Это PHP построен на веб-сервере плюс файл сервера server.php. И конфигурации, которые он использует, - это конфигурации CLI. Попробуйте php --ini найти все включенные конфигурации.

В моем случае (Ubuntu 17.10), файл конфигурации Xdebug был включен из местоположения /etc/php/7.2/cli/conf.d/20-xdebug.ini. Я добавил вторую строку, чтобы включить удаленный xdebug, и теперь файл выглядит так: всего 2 строки:

zend_extension=xdebug.so xdebug.remote_enable=1

Теперь для настройки PhpStorm:

  • Run > Edit Configurations и укажите любое имя или просто оставьте его как Без имени
  • Нажмите ... после опции Сервер:
  • Нажмите + и укажите любое имя (например Приложение Laravel)
  • Задайте Хост как localhost, Порт как 8000 и Отладчик как Xdebug и не оставляйте любые другие галочки не отмеченными!
  • Нажмите Apply/OK
  • В раскрывающемся списке Сервер: выберите тот, который мы только что установили.
  • Задайте Стартовый URL: URL-адрес, где вы хотите начать отладку (например, \user)
  • Выберите предпочтительный браузер.
  • Нажмите Apply/OK

Помните, что отладчик будет работать только после запуска реального веб-сервера, который является сервером, начинающимся с команды php artisan server.

Теперь запустите веб-сервер, т.е. php artisan serve и в PhpStorm нажмите Run > Debug 'your-debug-config', и все должно работать нормально!

Ответ 4

Часть 1 Выполнить> Изменить настройки

выбрать PHP-встроенный веб-сервер и просто установить Host: localhost Порт: 8000//или что вы используете

enter image description here

Нажмите ОК

Часть 2 Установите расширение Xdebug helper Chrome

enter image description here

В браузере Chrome в правом верхнем углу должна быть иконка ошибки Нажмите на нее и выберите Debug так что серый значок жучка меняет цвет на зеленый

enter image description here

Теперь, когда вы запускаете php artisan serve и установить контрольную точку отладки

enter image description here

и нажмите на значок телефона, чтобы "Начать прослушивание подключения Xdebug"

enter image description here

это должно поймать вашу контрольную точку отладки