Установка и настройка JetBrains PhpStorm 6 под Windows 7 для разработки web-приложений на PHP

в 13:35, , рубрики: Apache, php, windows, метки:

Я Microsoft Scum и привык к наличию инсталляторов, после успешного выполнения которых у меня на машине установлено и настроено всё необходимое.

С PHP оказалось не так, что привело к нескольким часам мучений и ложных ходов, для устранения которых я и написал эту статью.

Как это работает

Будучи web-разработчиком под ASP.NET ещё с 2003 года, я привык, что разрабатываемое приложение крутится на IIS. Сейчас вместе со Студией ставится компактная версия IIS, и, признаться, разработка под ним в большинстве случаев гораздо удобнее развёртывания дополнительной разработческой среды под полноценным IIS.

У PHP также есть режим запуска в качестве сервера с выбором корневой директории приложения. Однако, выяснилось, что такой режим не позволяет по-человечески отлаживать продукт. По этой причине мы будем воссоздавать более или менее родную среду для работы фреймворков: Apache+PHP. При этом возможность отладки и тестирования обеспечивается отдельными модулями, у которых есть конкретная сборка под конкретную сборку PHP без каких-либо свобод выбора. Оно и к лучшему — отсутствие свободы выбора версий ограничивает нас всего одним сценарием установки. Его то мы и опишем.

В статье будут использованы значения по умолчанию для 64-битной Винды. Для 32-битной разница лишь в том, что вместо папки C:Program Files (x86) надо использовать папку C:Program Files.

Целевая конфигурация

  • PHP 5.4 (5.4.15) TS x86 — многопоточная версия PHP 5.4. Её безглючность не гарантируется, однако, у однопоточного отсутствуют жизненно важная для работы с Apache php5apache2_4.dll, так что ставим многопоточный PHP, крестимся и едем дальше;
  • xDebug 2.2.2 — я решил не пользоваться стандартным Zend Debugger, поскольку индивидуальный web-сервер не нуждается в коллективной отладке, а вот точность при работе профайлера может оказаться крайне полезной;
  • PHPUnit — поскольку предполагается, что разработчик искушен не только хорошими средствами разработки, но и хорошими средствами поддержки функционала в процессе последующих изменений, а также не брезгует пользоваться разными вендорскими фреймворками вроде Symfony, модульное тестирование просто необходимо;
  • Apache 2.4.4 — всё вышеперечисленное мы будем раскручивать под самой современной на момент последней правки данной статьи версией Апача;
  • JetBrains PhpStorm 6 — лично для меня он удобнее, чем бесплатные аналоги, а также он прекрасно интегрирован с PHP, хотя и будут нюансы.

Ставим PHP 5.4

На момент написания статьи инсталлятора не предлагалось, поэтому ставим что есть:

  1. логинимся под учетной записью с административными правами;
  2. windows.php.net/download/#php-5.4 — качаем zip-архив VC9 x86 (http://windows.php.net/downloads/releases/php-5.4.15-Win32-VC9-x86.zip ); любители жесткого хардкора могут скачать соответствующий Debug Pack, но у меня предложенная сборка пока ни разу не упала;
  3. распаковываем содержимое zip-архива в папку «C:Program Files (x86)PHPv5.4» (думаю, гипотетический инсталлятор поставил бы всё именно туда);
  4. внутри полученной папки запускаем скрипты «pws-php5cgi.reg» и «pws-php5isapi.reg» (это не обязательно, но так PHP пропишется в IIS и даст возможность захостить ваш шедевр);
  5. копируем «php.ini-development» в «php.ini»
  6. открываем «php.ini», находим там блок:
    ; Directory in which the loadable extensions (modules) reside.
    ; http://php.net/extension-dir
    ; extension_dir = "./"
    ; On windows:
    ; extension_dir = "ext"
    

    и снимаем комментарий с последней строки, получится:

    ; Directory in which the loadable extensions (modules) reside.
    ; http://php.net/extension-dir
    ; extension_dir = "./"
    ; On windows:
    extension_dir = "ext"
    
  7. всё в том же php.ini находим блок:
    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    date.timezone =
    

    и прописываем там зону, в которой находится компьютер (у меня это «Europe/Moscow», php.net/manual/en/timezones.php содержит информацию о поддерживаемых зонах):

    [Date]
    ; Defines the default timezone used by the date functions
    ; http://php.net/date.timezone
    date.timezone = "Europe/Moscow"
    
  8. лезем в StartControl PanelSystemAdvanced System Settings, там в Environment Variables в списке System Variables находим переменную «Path» и добавляем через ";" путь «C:Program Files (x86)PHPv5.4»
  9. Открываем cmd и убеждаемся, что команда 'php -v' (регистр имеет значение) выдает информацию по установленной версии PHP (в гайде это 5.4.15).

Готово.

Ставим XDebug 2.2.2

Инсталлятора традиционно нет, так что:

  1. вроде мы уже залогинены под админом…
  2. xdebug.org/download.php — качаем 5.4 VC9 (32 bit), который без суффикса TS xdebug.org/files/php_xdebug-2.2.2-5.4-vc9.dll — это как раз для многопоточного PHP 5.4; это сразу .dll, поэтому браузер может выразить сомнение в целесообразности скачивания — убедите его;
  3. скаченный файл кладем в папку «C:Program Files (x86)PHPv5.4ext»— в этой папке лежат все расширения PHP;
  4. открываем php.ini (любым редактором, но обязательно в режиме Run as administrator…, иначе наши правки не удастся сохранить) и добавляем блок:
    [XDebug]
    ; http://xdebug.org/wizard.php
    zend_extension = extphp_xdebug-2.2.2-5.4-vc9-nts.dll
    xdebug.remote_enable=1
    xdebug.remote_port="9000"
    xdebug.profiler_enable=1
    xdebug.profiler_output_dir="D:TempXDebugProfiler"
    xdebug.remote_host = "localhost"
  5. открываем cmd и переходим в папку, которую не жалко засорить одним файлом;
  6. запускаем в ней команду: «php -i > out.txt» — в текущей директории появится 30 килобайт информации о конфигурации php;
  7. xdebug.org/wizard.php — идем на страницу настройки xdebug, вставляем содержимое «out.txt» в большое белое поле и нажимаем [Analyze my phpinfo() output], должен получиться следующий результат:

    SUMMARY
    • Xdebug installed: 2.2.2
    • Server API: Command Line Interface
    • Windows: yes — Compiler: MS VC9 — Architecture: x86
    • Zend Server: no
    • PHP Version: 5.4.14
    • Zend API nr: 220100525
    • PHP API nr: 20100525
    • Debug Build: no
    • Thread Safe Build: no
    • Configuration File Path: C:Windows
    • Configuration File: C:Program Files (x86)PHPv5.4php.ini
    • Extensions directory: ext
    YOU'RE ALREADY RUNNING THE LATEST XDEBUG VERSION
    But here are the instructions anyway:
    1. Download
    2. Move the downloaded file to ext
    3. Update C:Program Files (x86)PHPv5.4php.ini and change the line
    zend_extension = ext

    Надпись капслоком самая важная. Если вдруг завтра выйдет свежая версию XDebug, пишите, я его себе тоже поставлю.

Готово.

Ставим PHPUnit

  1. pear.php.net/go-pear.phar — скаченный файл кладем в папку «C:Program Files (x86)PHPv5.4» (phar — это файл с дистрибутивом приложения, запустить дистрибутив можно командой «php file_name.phar» в консоли);
  2. запускаем command prompt от имени администратора, переходим в папку «C:Program Files (x86)PHPv5.4» и вызываем команду «php go-pear.phar», на вопросы скрипта отвечаем «system», в следующем вопросе нажимаем Enter (или принимаем все локации директорий по умолчанию), позволяем отредактировать php.ini (инсталлятор пропишет «C:Program Files (x86)PHPv5.4pear в качестве инклюд-пути»);
  3. в результате выполнения предыдущего пункта появляется система управляния PHP-паками (аналогично NuGet для Студии), которая использует онлайн-репозитории — добавим туда репозиторий PHPUnit, введя в command prompt (под админом) команду «pear channel-discover pear.phpunit.de» (не смотря на прокси, у меня всё получилось, в противном случае проверьте правильность настроек прокси-сервера в Винде и его работоспособность);
  4. если в command prompt ввести команду «pear remote-list -c phpunit», то станет ясно, что помимо самого PHPUnit там есть много других печенек, но пока мы поставим только саму основу, а дополнительные модули будем добавлять по мере необходимости: «pear install phpunit/phpunit»;

Готово.

Обновление PHPUnit и других модулей, установленных с помощью PEAR, делается командой «pear upgrade-all». Вообще, рекомендую почитать инструкцию по PEAR. Опытного разработчика она непременно наведёт на размышления о том, чтобы распространять свои труды не закачкой по FTP, а с использованием всё того же PEAR.

Ставим Apache 2.4

Лично у меня забиты порты 80 (IIS), 8080 (TFS) и 8000 (HTTP proxy). По этой причине я поставил Apache слушать порт 8085. Здесь будут приведены настройки для Apache на порт 8085. Также в качестве корневых директорий я использую «d:wwwApache».

У Апача под Винду есть отдельный сайт www.apachelounge.com/, откуда можно скачать самый свежак. Поскольку PHP у нас x86, то и все .dll-файлы у него x86, поэтому и Apache придется ставить x86.

  1. www.apachelounge.com/download/ — Качаем httpd-2.4.4-win32.zip и распаковываем содержимое папки «Apache24» архива в папку «C:Program Files (x86)Apache24»;
  2. открываем на редактирование (под админом) файл C:Program Files (x86)Apache24confhttpd.conf
  3. находим настройку ServerRoot и ставим
    ServerRoot "C:/Program Files (x86)/Apache24"
    

    (С тех пор, как Винда превратилась из графической оболочки над DOS в самостоятельную операционку, ей всё равно, в какую сторону наклонена косая черта, а вот Апачу не всё равно, нам надо использовать строго "/");

  4. находим настройку Listen и ставим
    Listen 8085
    
  5. находим настройку DocumentRoot (и следующий за ней блок Directory) и настраиваем наши пути:
    DocumentRoot "D:/www/Apache/web"
    <Directory "D:/www/Apache/web">
        #
        # Possible values for the Options directive are "None", "All",
        # or any combination of:
        #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
        #
        # Note that "MultiViews" must be named *explicitly* --- "Options All"
        # doesn't give it to you.
        #
        # The Options directive is both complicated and important.  Please see
        # http://httpd.apache.org/docs/2.4/mod/core.html#options
        # for more information.
        #
        Options Indexes FollowSymLinks
    
        #
        # AllowOverride controls what directives may be placed in .htaccess files.
        # It can be "All", "None", or any combination of the keywords:
        #   AllowOverride FileInfo AuthConfig Limit
        #
        AllowOverride None
    
        #
        # Controls who can get stuff from this server.
        #
        Require all granted
    </Directory>

    не забудьте создать эту директорию (вы могли заметить, что в конце пути я добавил поддиректорию web — это связано с тем, что я собираюсь использовать Symfony, который предполагает содержание самого сайта в поддиректории web общего проекта);

  6. находим список большого количества инструкций LoadModule и раскомментариваем/редактируем/добавляем в хвост настройку
    LoadModule php5_module "C:/Program Files (x86)/PHP/v5.4/php5apache2_4.dll"
  7. не факт, что модуль загрузится, поэтому в последних Apache принято прочие связанные с модулем настройки заклячать в условие IfModule, проверяющее, что модуль загрузился, поэтому находим/добавляем контейнер для настроек PHP-модуля под Apache:
    <IfModule php5_module>
    
    </IfModule>
  8. настраиваем модуль PHP под Apache:
    <IfModule php5_module>
    	PHPIniDir "C:/Program Files (x86)/PHP/v5.4"
    	AddHandler application/x-httpd-php .php
    </IfModule>
  9. находим настройки модуля листинка директории и редактируем её:
    <IfModule dir_module>
    	DirectoryIndex index.php index.html
    </IfModule>
  10. регистрируем Апач в качестве сервиса командой в command prompt
    "C:Program Files (x86)Apache24binhttpd" -k install
    
  11. при загрузке Apache будет запускаться автоматически, а сейчас запустим его вручную командой в command prompt
    net start Apache2.4
  12. а теперь посмотрим, как всё это будет взлетать, поместив в директорию «D:wwwApacheweb» файл «index.php»:
    <?php
    phpinfo();
    

    и запросив его из браузера по url http://localhost:8085/

Готово.

Настраиваем PhpStorm 6

www.jetbrains.com/phpstorm/ — качаем, ставим, запускаем PhpStorm 6 (у него есть месяц триала, лично мне этого более чем хватило для приобретения).

Устанавливаем интеграцию с TFS (опционально)

К работе с TFS из среды PhpStorm, как и из других продуктов, использующих среду Idea, придется привыкать. Терминология и поведение существенно отличается от оных в Visual Studio. Тем не менее, пользоваться интеграцией гораздо удобнее. чем бегать в Visual Studio за каждым файлом.

Итак,

  1. На экране должно быть стартовое окно PhpStorm, если вместо этого окна отображается среда разработки, закрываем текущий проект;
  2. в правой области стартового окна выбираем Configure/Plugins Идём в File/Settings;
    Из среды разработки эта настройка доступна из меню File/Settings. В левой части окна отображается список настроек как проекта, так и среды вцелом. Нужно будет выбрать настройк среды Plugins.
    «Настройки проекта» — настройки из списка с заголовком Project Settings,
    «Настройки среды» — настройки из списка с заголовком IDE Settings.
  3. в открывшемся списке плагинов убеждаемся, что плагин «TFS Integration» не установлен (по умолчанию он не входит в поставку PhpStorm) и нажимаем кнопку «Install JetBrains plugin» (внизу окна);
  4. в окне поиска вбиваем «TFS» и щелкаем два раза на строке с плагином «TFS Integration», на вопрос о намерении скачать плагин отвечаем твердым «Yes»;
  5. дожидаемся окончания установки плагина, закрываем окна настроек и перезапускаем PhpStorm, чтобы свежеустановленный плагин заработал.

Теперь у нас есть среда, готовая работать с TFS.

Создаём или открываем проект

  1. В папке D:wwwApache создаём новый пустой проект, или открываем уже имеющийся
    Помним, что сервер Apache у нас настроен на поддиректорию web, а значит и сам сайт будет находиться в папке web проекта. В будущем рядом с web помимо настроек проекта .idea могут появиться такие подпапки, как vendor для хранения сторонних разработок, test для скриптов тестирования и прочие подпапки для работы фреймворков.
  2. если сайт пустой, то создаём на сайте простейшую страницу index.php с содержимым типа
    <?php
    phpinfo();
  3. если проект обслуживается системой контроля версий, это необходимо прописать в настройках проекта Version Control.

Настраиваем php-сервер в PhpStorm

  1. В настройках проекта открываем настройку PHP и настраиваем там:
    PHP language level: 5.4
    Interpreter: нажимаем "…", указываем Name: PHP 5.4, PHP Home: C:Program Files (x86)PHPv5.4, Debugger: Xdebug;
    Include path: нажимаем "+" и указываем «C:Program Files (x86)PHPv5.4pear», чтобы наш проект автоматически подтягивал ранее установленный PHPUnit.
  2. в настройках проекта открываем PHP/Servers — откроется закладка с пустым списком серверов;
  3. нажимаем "+" для добавления нового сервера и заполняем его данные:
    Name: Local Apache
    Host: localhost
    Port: 8085
    Debugger: Xdebug
  4. если в конфигурации Xdebug указан порт, отличный от 9000, то идем в настройки проекта PHP/Debug и там в разделе «Xdebug» настраиваем «Debug port»;
  5. в настройках проекта открываем PHP/PHPUnit и убеждаемся, что там указано «Load from include path».

Настраиваем web-приложение

  1. В меню «Run/Edit Configurations» щелкаем на "+", выбираем «PHP Web Application» и заполняем его данные:
    Name: My Application at Local Apache
    Server: Local Apache
    Start URL: стартовая страница (index.php)
    Browser: я выбрал Chrome, но для каждой конкретной страницы есть опция запуска в любом браузере

Запускаем отладку

  1. Ставим на какую-нибудь инструкцию брэйкпоинт;
  2. в меню «Run/Debug» выбираем «My Application at Local Apache» — запустится отладка сайта;
  3. убеждаемся, что выполнение php-скрипта прервалось на брэйкпоинте, и нам доступны все прелести дебагера.

Среда готова к работе.

Заключение

Пользователям MS Visual Studio придется немного привыкнуть к тому, что нажатие кнопки Run при включенном дебагере приводит не к продолжению исполнения текущего скрипта, а к открытию в браузере новой закладки, новому запросу на сервер и отключению отладки, но даже с такими отличиями процесс отладки протекает довольно легко.

Конечно, только удобной среды разработки не достаточно для создания хорошего продукта. Рекомендую почитать habrahabr.ru/post/174963/ — статью, в которой кратко изложены основные грабли, на которые натыкаются разработчики в первых проектах. Если же у вас уже есть успешный опыт разработки крупных проектов на других платформах, старайтесь искать на платформе PHP похожие решения, или приносите свои идеи.

Автор: DarthJurassic

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js