PHP в Visual Studio Code: конфигурация среды разработки

Раздел: Разработка на PHP -> Инструменты разработки

Обзор настройки PHP в Visual Studio Code

Visual Studio Code является одним из самых популярных редакторов кода благодаря гибкой системе расширений. Для эффективной разработки на PHP требуется корректная конфигурация: установка необходимых расширений, настройка путей к интерпретатору, организация отладки и инструментов форматирования. Ниже представлены основное рекомендуемое решение и альтернативные варианты, каждый из которых сопровождается примерами кода, пошаговыми инструкциями и описанием возможных проблем.

Основное решение: Intelephense + Xdebug + PHP Server

Этот набор расширений обеспечивает полноценную поддержку PHP: подсветка синтаксиса, автодополнение, рефакторинг, отладка и запуск встроенного сервера.

Шаг 1. Установка PHP интерпретатора

Скачать PHP с официального сайта (Windows) или установить через пакетный менеджер (Linux: sudo apt install php). После установки проверить версию командой:

php -v

Visual code php (настройка php в visual studio code)

Ожидаемый вывод

PHP 8.2.12 (cli) (built: Nov  8 2024 12:00:00) ( NTS )

Шаг 2. Установка расширений VS Code

Открыть панель расширений (Ctrl+Shift+X) и установить:

  • PHP Intelephense - мощный анализатор и автодополнение
  • PHP Debug - интеграция Xdebug
  • PHP Server - запуск встроенного сервера одной кнопкой

Шаг 3. Настройка пути к PHP в settings.json

Открыть настройки (Ctrl+,), перейти в Extensions > PHP > Php: Executable Path или добавить в settings.json:

{
  "php.executablePath": "C:/php/php.exe"
}

Для Linux путь может выглядеть как /usr/bin/php.

Шаг 4. Настройка Xdebug

Убедиться, что Xdebug установлен и активирован в php.ini. Пример конфигурации для Xdebug 3:

zend_extension=xdebug
debug.mode=debug
xdebug.start_with_request=yes
xdebug.client_host=127.0.0.1
xdebug.client_port=9003

После изменения php.ini перезапустить веб-сервер или терминал.

Шаг 5. Создание конфигурации отладки launch.json

Открыть вкладку Run and Debug (Ctrl+Shift+D), нажать create a launch.json file, выбрать PHP. Будет создан файл:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": {
        "/var/www/html": "${workspaceFolder}"
      }
    }
  ]
}

Запустить отладку (F5) и сделать запрос к PHP-скрипту через браузер или терминал.

Шаг 6. Запуск встроенного сервера через расширение PHP Server

Нажать правой кнопкой мыши на файле index.php, выбрать PHP Server: Serve project. Сервер запустится на http://localhost:8080.

Типичные проблемы и их решения

  • Intelephense не видит классы - проверить настройку intelephense.files.maxSize и пути к автозагрузчику Composer.
  • Xdebug не подключается - убедиться, что порт 9003 не занят и php.ini загружен (выполнить php --ini).
  • PHP Server не запускается - проверить путь к PHP в настройках расширения.

Альтернативные варианты настройки

Вариант 1. Как получить базовую подсветку без тяжеловесного анализатора?

Установить расширение PHP IntelliSense от Damian H.. Оно легче Intelephense, но предоставляет меньше функций.

// settings.json для PHP IntelliSense
{
  "php.executablePath": "/usr/local/bin/php",
  "php.validate.enable": true
}

Проблема: Нет поддержки современных синтаксических конструкций. Решение: Дополнить установкой расширения PHP Language Features.

Вариант 2. Как запустить PHP проект без расширения PHP Server?

Использовать встроенный терминал VS Code. Команда запуска сервера:

php -S localhost:8000 -t public/

Добавить в tasks.json для автоматизации:

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Serve PHP",
      "type": "shell",
      "command": "php -S localhost:8000 -t public/",
      "isBackground": true,
      "problemMatcher": []
    }
  ]
}

Запуск через Terminal > Run Task.

Проблема: Нужно останавливать сервер вручную. Решение: Использовать расширение Task Runner для управления процессами.

Вариант 3. Как настроить PHP в контейнере Docker?

Установить расширение Dev Containers и создать .devcontainer/devcontainer.json:

{
  "name": "PHP Dev",
  "image": "php:8.2-cli",
  "extensions": [
    "bmewburn.vscode-intelephense-client",
    "felixfbecker.php-debug"
  ],
  "settings": {
    "php.executablePath": "/usr/local/bin/php"
  }
}

При открытии папки VS Code предложит переоткрыть в контейнере. Xdebug настраивается внутри контейнера через дополнительные Dockerfile.

Проблема: Не работает отладка между хостом и контейнером. Решение: Добавить xdebug.client_host = host.docker.internal для Windows/Mac.

Вариант 4. Как обеспечить единый стиль кода через PHP CS Fixer?

Установить php-cs-fixer глобально или в проекте через Composer. Затем настроить задачу форматирования в settings.json:

{
  "php-cs-fixer.executablePath": "${workspaceFolder}/vendor/bin/php-cs-fixer",
  "php-cs-fixer.rules": "@PSR12",
  "php-cs-fixer.allowRisky": false
}

Расширение PHP CS Fixer для VS Code автоматически применяет форматирование при сохранении (настраивается в editor.formatOnSave).

Проблема: Файлы не форматируются. Решение: Проверить, что расширение активировано и путь к php-cs-fixer корректен. Выполнить в терминале php vendor/bin/php-cs-fixer fix --dry-run --diff src/ для диагностики.

Вариант 5. Как запускать тесты PHPUnit прямо из редактора?

Установить расширение PHPUnit (например, PHPUnit Test Explorer). Настройка через settings.json:

{
  "phpunit.php": "/usr/local/bin/php",
  "phpunit.phpunit": "${workspaceFolder}/vendor/bin/phpunit",
  "phpunit.args": [
    "--configuration", "${workspaceFolder}/phpunit.xml"
  ]
}

После этого в тестовых файлах (например, tests/ExampleTest.php) появляются кнопки запуска конкретного теста или файла.

Проблема: Тесты не обнаруживаются. Решение: Убедиться, что файлы соответствуют шаблону *Test.php и правильно настроен phpunit.xml.

Расширенные примеры конфигурации и автоматизации

Пример 1. Множественные конфигурации отладки для веба и CLI

В файле launch.json можно создать несколько профилей, чтобы отлаживать веб-запросы и консольные скрипты отдельно:

Пример
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Listen for Xdebug (Web)",
      "type": "php",
      "request": "launch",
      "port": 9003,
      "pathMappings": { "/var/www/html": "${workspaceFolder}" }
    },
    {
      "name": "Launch CLI script",
      "type": "php",
      "request": "launch",
      "program": "${workspaceFolder}/bin/console",
      "args": ["some:command"],
      "cwd": "${workspaceFolder}"
    }
  ]
}

Для запуска CLI скрипта выбрать конфигурацию Launch CLI script и нажать F5.

Пример 2. Настройка Intelephense для фреймворка Laravel

Laravel использует фасады, трейты и динамические методы. Чтобы Intelephense корректно их распознавал, нужно указать корневую папку и добавить настройки:

Пример
{
  "intelephense.files.maxSize": 5000000,
  "intelephense.environment.includePaths": [
    "vendor/laravel/framework/src"
  ],
  "intelephense.compatibility.correctForBasePaths": true,
  "intelephense.completion.triggerParameterHints": true
}

После этого автодополнение будет работать для \DB::table(), \Auth::user() и других фасадов.

Пример 3. Интеграция статического анализатора PHPStan

Установить расширение PHPStan или настроить пользовательскую задачу tasks.json:

Пример
{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "PHPStan analyze",
      "type": "shell",
      "command": "vendor/bin/phpstan analyse src --level=max",
      "group": "test",
      "presentation": {
        "reveal": "always",
        "panel": "new"
      },
      "problemMatcher": {
        "base": "$phpstan",
        "owner": "phpstan",
        "fileLocation": ["relative", "${workspaceFolder}"]
      }
    }
  ]
}

После запуска задачи в панели проблем будут отображаться ошибки. Пример вывода:

 1/1 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
 ------ ----------------------------------------------------------------- 
  Line   src/Example.php
 ------ ----------------------------------------------------------------- 
  15     Parameter $value of method Example::process() has no type specified.
 ------ -----------------------------------------------------------------

Пример 4. Настройка PHP CS Fixer с правилами PSR-12 и проектом Symfony

Создать файл .php-cs-fixer.php в корне проекта:

Пример
<?
return (new PhpCsFixer\Config())
    ->setRules([
        '@PSR12' => true,
        'array_syntax' => ['syntax' => 'short'],
        'no_unused_imports' => true,
        'ordered_imports' => ['sort_algorithm' => 'alpha'],
    ])
    ->setCacheFile(__DIR__.'/.php-cs-fixer.cache')
    ->setFinder(PhpCsFixer\Finder::create()
        ->in(__DIR__.'/src')
        ->in(__DIR__.'/tests')
    );

Расширение PHP CS Fixer для VS Code автоматически подхватит этот конфиг. Запуск форматирования через команду PHP CS Fixer: Fix.

Пример 5. Автоматический запуск PHPUnit при сохранении файла

Добавить в settings.json:

Пример
{
  "phpunit.runOnSave": {
    "enabled": true,
    "pattern": ".php"
  }
}

При сохранении любого PHP-файла будет запускаться весь набор тестов. Результат появится в панели вывода:

PHPUnit 9.6.19 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.12
Configuration: /home/user/project/phpunit.xml

................................................... 61 / 61 (100%)

Time: 00:00.352, Memory: 20.00 MB

OK (61 tests, 100 assertions)

Настройка PHP в Visual Studio Code - comments

En
Visual code php (php)