Итак, выбор IDE
Не делайте под Маяковского, делайте под себя!
Почти, что Владимир Владимирович
Строго говоря, IDE для работы с PHP-проектами не так уж и мало. Начиная от ZendStudio, NetBeans, Aptana и, конечно же, Eclipse.
Если кому-то интересно сравнить эти Среды Разработки досконально и скурпулезно, рекомендую ознакомиться с замечательной таблицей Александра Макарова и Владимира Стаценко «Сравнение PHP IDE»
Хотя… хотя, как говорится, «на вкус и на цвет все фломастеры разные». Скажем, в этой табличке в графе «рефакторинг» напротив Eclipse + PDT стоит прочерк. Но ведь, развитый поиск с применением Регулярных Выражений еще никто не отменял? Как говорил великий поэт Владимир Владимирович Маяковский (или не говорил? Ну да не важно): не делайте под Маяковского, делайте под Себя!
Мне кажется, что одним из самых немаловажных факторов при выборе Среды Разработки, будет и ее расширяемость – плагины, пристройки, и т.д. Тут, Eclipse безусловно лидирует. Достаточно заглянуть на страничку http://www.eclipse.org/projects/
И властью мне данной, как автору этой статьи, здесь мы будем рассматривать именно комплекс Eclipse + PDT. Хотя бы потому, что эту среду можно полноценно установить и настроить на большинстве достаточно популярных Операционных Систем. От «народной» Windows, и «далекого от народа» Linux до поднавязший на зубах у горе-критиков Mac OS X.
Устновка и настройка
В данном случае мы будем рассматривать установку под Windows. В других ОС будет отличаться лишь способ установки самого пакета Eclipse, но процесс установки и настройки плагинов будет практически одинаковым.
Почти все, что нам необходимо, находится на сайте http://www.eclipse.org. Правда, нас не будет интересовать изобилие дистрибутивов, предлагаемое на страничке eclipse.org/downloads — давайте ограничимся Eclipse Classic.
Инсталлятора, как это водится в OpenSource FreeWare дистрибутивах, здесь нет. Есть zip-файл eclipse-SDK-3.4.2-win32.zip «весом» в 152 мегабайта. Скачивается он не быстро (скажем, с германского канала минут двадцать, не меньше) так что если Вы поставили закачку, можете спокойно продолжать читать статью дальше. Заодно можете «залить» дистрибутив Java, если он у вас не установлен с сайта java.sun.com. Ну, пусть это будет Java SE из какого-нибудь последнего обновления…
Если Вы уже скачали дистрибутив, можете «раскрутить» его в «C:Program Files», с учетом того, что в архиве корневая директория «eclipse» уже есть. Под Windows Vista для этого понадобится запустить архиватор с правами администратора (правая кнопка мыши на иконке архиватора и «запустить с правами Администратора»). Ну а «маководы» могут перетащить картинку с соответствующей эмблемой в папку Application. Им, «макаководам», проще!
Если все скачали и установили, можем смело запускать нашу Среду разработки.
Создаем иконку запуска на рабочем столе и запускаем Eclipse. Выбираем расположение проектов.
Рабочее пространство, конечно, красивое, но совершенно бесполезное с точки PHP-кодера. Для начала обновим среду разработки: «Help->Help->Software Updates. Здесь мы выбираем лишь обновление Eclipse, но никаких новых пакетов не ставим.
Раньше этот процесс мог продолжаться до двух часов – обновлений много, канал убогий, желающих много… зрелище печальное и байтораздирающее. Теперь все сводится к каким-нибудь пятнадцати-двадцати минутам!
Самое интересное, что всего этого можно и не делать. Просто, кто знает, что будет, если мы захотим обновить Среду Разработки уже после того, как она будет настроена. Лучше это сделать до всех настроек и установок.
Смотрим на список устанавливаемых обновлений (очень информативная панель, не правда ли?)
И принимаем (или не принимаем) лицензионное соглашение.
Все установилось? Прекрасно!
Создание проекта
Следующим шагом устанавливаем плагин для разработки PHP-проектов — PHP Development Tools. Идем на страничку списка проектов и ищем там соответствующую ссылку. Переходим на страничку и копируем в разделе Releases, ссылку для автоматической подгрузки в Eclipse: download.eclipse.org/tools/pdt/updates. В установке этого пакета есть небольшая тонкость: сначала надо поставить DLTK — Dynamic Language Toolkit, а лишь потом, самый PDT.
Итак, в первую очередь устанавливаем инструментарий DLTK
И только после перезагрузки — самый PHP Development Tools
При установке PDT надо выбрать одну из версий – PDT 1.03 или PDT 1.05. Вторая версия PDT пока автоматически не устанавливается. Это можно сделать только из архива. К тому же, она ведет себя местами нестабильно. Впрочем, если хотите, можете скачать ее со странички www.eclipse.org/pdt/downloads/ и почитать документацию по установке PDT по адресу www.eclipse.org/pdt/docs.php.
Весит все это удовольствие около ста мегабайт, качается не быстро, так что опять откидываемся на спинку стула поудобнее и терпеливо ждем (прямо, как будто устанавливаем Windows).
Если установка свершилась, попробуем создать какой-нибудь собственный проект PHP. Это не так уж и сложно. Выбираем в меню «File->New Project->PHP Project». Обратите внимание на то, что после того, как вы создали проект, в меню появится отдельная опция «File->New->PHP Project».
Настриваем PHP-проект: какая версия PHP используется? (в данном случае, пятая) и нужно-ли использовать JavaScript-tools. Здесь же можно указать, что сам проект находится не в Workspace, а где-то еще. Это весьма и весьма удобно! Ведь проект может находится даже на сетевом диске, подключенном с удаленного компьютера.
Здесь можно подключить какие-нибудь внешние фрэймворки, библиотеки и настроить переменные окружения для отладки. Во-всяком случае, фреймворки полезно подключать затем, чтобы корректно работал отладчик и автодополнение кода в редакторе Eclipse.
Выбираем «перспективу» проекта, т.е., тот набор модулей, который будет составлять совокупность «видов» (способов отображения информации) и редакторов проекта Среды Разработки.
А вот, собственно, и сам проект:
Проект можно создать не только если он находится на локальном компьютере, но и «подключить» его по удаленному соединению. Скажем, используя замечательную утилиту sftpDrive или по SMB-протоколу. При этом надо в соответствующем месте поставить галочку, что проект находится не там, где выбранная Вами папка «Workspace», а в другом месте. Теперь подсветится новое окошко в которое можно вписать путь к подключенному сетевому диску.
Недостаток один: не получится работать сразу нескольким программистам.
Во-первых, при попытке совместного подключения начисто изуродуются файлы настройки проектов Eclipse; а во-вторых даже если бы и получилось, представьте себе, какая каша получится из совместной работы двух программистов над одним файлом!
Подключение по протоколу SVN
Установка и настройка subversion
…а дальше выполняем ту операцию, которую мы делать уже умеем…
Из анекдота про математиков
Можно, можно, конечно для совместной разработки использовать CVS, но… она довольно старенькая и в администрировании сложновата. Тем более, что SVN + trac – представляет из себя одну из самых приятных OpenSource систем командной разработки проектов. Удобный и понятный WEB-интерфейс, система «ветвления» проекта, когда каждый из разработчиков может начать новую ветвь, не пересекаясь с другими… да мало ли? Если интересно разобраться более подробно, читайте документацию к проекту — Subversion Book. Написано очень толково и есть русский перевод. Можете также ознакомиться с подробной статьей в википедии – Subversion
Нам понадобится Eclipse Plugin, позволяющий работать с Централизованной Системой Управления Версиями (Subversion – subversion.tigris.org) Для начала попробуем выбрать рабочий плагин Subversive, рекомендуемый на странице проектов Eclipse. Точно также копируем ссылку в разделе Releases и через «Help->Software Updates->Available Software» добавляем проект в список. Правда, скорее всего он уже автоматически установился вместе со средой разработки PDT.
SVN-репозитарий проекта
Для начала попробуем создать svn-репозитарий, чтобы было с чем работать. Хорошо, если у Вас есть Linux-компьютер в локальной сети, на котором Вы можете от души экспериментировать. Если нет, тоже ничего: существуе win32-версия Subversion, которая неплохо работает в среде Windows.
Примеры буду приводить именно для домашнего Linux-компьютера в домашней сети. Дело в том, что для дальнейших экспериментов нам понадобится именно #nix среда. Итак, мы устанавливаем subversion и subversion-tools (примеры привожу для дистрибутива Ubuntu Изначально из импортируемого проекта необходимо удалить те файлы, которые не подлежат изменению непосредственно при помощи нашей Среды Разработки. Скорее всего, это будут двоичные файлы – изображения, исполняемые файлы и т.д. Особенно внимательно надо удалить те файлы, которые могут изменяться самой системой. Например, файлы журналов, конфигурационные файлы, управляемые при помощи WEB-интерфейсов и т.д. Их наличие потом может помешать «чекаутить» проект, т.е., выложить на сервер рабочую версию проекта из SVN-репозитария. Вообще говоря, размер проекта стоит свести к минимуму.
Также стоит из импортируемой директории убрать (просто переместить на время) файлы, которые созданы самим Eclipse’ом: .project/, .cache/, .settings. Готово? Открываем консоль Linux-сервера… хотя бы ту же PyTTY и начинаем:
$sudo apt-get install subversion subversion-tools $sudo useradd svn –m $sudo mkdir /home/svn/repos $sudo svnadmin create /home/svn/repos $sudo svn import /var/www/digimedia.ru/www/ file:///home/svn/repos/digimedia.ru/trunk/ -m “Initial import of project”
Можно, можно, конечно установить «подъём» сервиса через inetd, но xinetd, как-то… нагляднее, что ли? Одним словом, ставлю себе xinetd, а Вы, почтеннейшие граждане публика, как хотите:
$sudo apt-get install xinetd $sudo vim /etc/xinetd.d/svn
В файле /etc/xinet.d/svn пишем следующее:
# Begin /etc/xinetd.d/svn service svn { port = 3690 socket_type = stream protocol = tcp wait = no user = svn server = /usr/bin/svnserve server_args = -i -r /home/svn/repos } # End /etc/xinetd.d/svn
И перезапускаем xinetd:
$dao@servachog:~$ sudo /etc/init.d/xinetd restart * Stopping internet superserver xinetd [OK] * Starting internet superserver xinetd [OK]
Прописываем в /home/svn/repos/digimedia.ru/conf/passwd «сладкую» парочку user = password.
Осталось себя проверить:
dao@servachog:~$ svn checkout svn://localhost/digimedia.ru A digimedia.ru/trunk A digimedia.ru/trunk/cnstats A digimedia.ru/trunk/cnstats/cnt-rss.php *** *** ***
Ура, работает! Осталось «зачекаутить» проект (то есть, загрузить с сервера в локальную директорию копию проекта из SVN-репозитария) из среды Eclipse
Плагин Subversive
Попробуем «накатить» проект из удаленного SVN-репозитария:
Открываем «File->New->Project->SVN» (первый из них)
Вписываем данные нашего сервера (пока он у нас отвечает по протоколу svn), логин и пароль, которые до этого указали в конфигурационном файле проекта и… не работает. Во весь экран сообщение об ошибке!
Ну да, правильно: коннекторов-то и нет! А чтобы их поставить надо идти на сайт polarion.org и забрать их оттуда из репозитария (на данный момент — www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/).
Вот теперь, порядок!
Проект загружаем из папки trunk
Здесь можно настроить свойства проекта, подключить расширения JavaScript-разработки, вписать дополнительные библиотеки (скажем, какой-либо из фреймворков) и т.д. Мы ведь это уже видели?
Проще говоря, после подключения к репозитарию, выбираем (как это принято говорить у разработчиков Eclipse рабочую «Песпективу» и жестко связать ее с проектом.
Наблюдаем благостную картинку «подсасывания» проекта.
Готово. С проектом можно работать, можно его «комитить» (выкладывать в SVN-репозитарий изменения в проекта), можно «откатывать» изменения, можно удалять и добавлять файлы. Короче, проект управляем и доступен для изменения многим, а не одному злосчастному разработчику.
Использование плагина subclipse
Теперь воспользуетмся вторым плагином — Subclipse от разработчиков Subversion. Процедура та же: ищем на странице URI обновления (на сей момент это subclipse.tigris.org/update_1.4.x) Открываем «Help->Software Updates» и добавляем репозитарий в список.
Опять вопрос про месторасположение репозитария. Причем, если репозитарий был уже прописан, получим сообщение об ошибке: такое уже есть! В этом, кстати, существенное неудобство этих плагинов: если что прописал, не вырубишь делитом. Чтобы стереть списки с запомненными конфигурациями, надо лезть в директорию рабочего места и стирать конфигурационные файлы (до сих пор не разобрался, какие — каша там та еще)
После того, как прописаны URI-сервера (причем, используем протокол svn://) логин и пароль, просматриваем содержимое репозитария. Актуальное содержимое лежит, как правило в директории trunk.
Теперь предлагается выбрать имя проекта (и директории в папке workspace)
Наблюдаем радующую душу и сердце картинку загрузки данных в рабочее пространство Eclipse:
Готово! Дабы не удлиннять и так до боли знакомого процесса «наката» SVN-проекта, выберем «Checkout as project in the workspace».
Итак, наш проект добавляется, «накатывается» из SVN-репозитария и прекрасно «комитится» (т.е., изменения «выкладываются» на сервер) при помощи меню «File->Team->Commit.
И, кстати, не забывайте комментировать свои «коммиты» (загрузку изменений на сервер SVN). Хотя бы затем, что потом сами легче разберетесь, в том, где именно надо отменить изменения, если Ваш код пошёл явно не в ту сторону или Ваш соратник-программист «зацепился» с вами кодом (т.е., ваши разработки вошли в конфликт) Да и при помощи trac’а просматривать код легче! Впрочем, про trac’а, разговор будет особый и не в этот раз. Важно для нас то, что хотя-бы можно проанализировать, что сделано за день… и разобраться в том, что было сделано до того.
Комментировать, комментировать и еще раз комментировать, как завещал великий… ну завещал, вобщем.
Итак: чем же хороша данная конфигурация? Хотя бы тем, что если вы все работаете в интрасети, Вы можете с легкостью творить совместный проект, на Windows-компьютере. Положение ухудшается, если программисты работают из сети внешней. Тогда встроенной авторизации SVN будет явно не хватать! Да и компьютер, все же должен быть не с Windows на борту. FreeBSD, Linux, OpenSolaris и т.д. (вы, почтеннейшие граждане Публика, чувствуете, на что я намекаю?) Иначе будет слишком велика вероятность вторжения извне.
Протокол SVN+SSH
Степень безопасности «нативной» авторизации сервера SVN считается недостаточной для работы во «внешнем мире». Поэтому, работы сервера в сети Internet предлагается применять протокол svn+ssh. Проще говоря, авториация и активация утилиты svnserve осуществляется при помощи ключа ssh (или пары логин/пароль, но это менее безопасный способ), и дальнейший обмен информацией осуществляется через SSH-тоннеля. Уровень безопасности повышается весьма существенно!
В самом начале мы «завели» пользователя svn. Это не случайно: теперь мы воспользуемся им для обработки ssh-подключения. Для этого надо создать в директории /home/svn папку .ssh и в ней файл authorized_keys.
Кстати, сервис xinet.d нам больше не понадобится. Поэтому редактируем файл /etc/init.d/svn:
# Begin /etc/xinetd.d/svn service svn { disable = yes port = 3690 socket_type = stream protocol = tcp wait = no user = svn server = /usr/bin/svnserve server_args = -i -r /home/svn/repos }
Теперь в нашу задачу входит создание ключа авторизации. Для этого воспользуемся командой ssh-keygen (putty-gen здесь не пойдет!):
dao@servachog:~$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/dao/.ssh/id_rsa): id_rsa.dao Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa.dao. Your public key has been saved in id_rsa.dao.pub. The key fingerprint is: c0:57:fa:c6:14:60:9f:58:f9:1b:d6:f3:cd:0b:55:f2 dao@servachog The key's randomart image is: +--[ RSA 2048]----+ | o.+. | | . . *.o . .| | o + +. . o.| | o + + o.E| | S +. o.+.| | . .. +| | . .| | . | | | +-----------------+
У меня должно получиться два файла: id_rsa и id_rsa.pub. Соответственно, id_rsa.dao кладем к себе на компьютер: это наш секретный ключ, а содержимое id_rsa.pub переписываем в /home/svn/.ssh/authorized_keys в следующем виде:
command="/usr/local/bin/svnserve -t —tunnel-user=vadim -r /srv/svn/repository/" ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAr9L2ZtRmbsZRUf5 FlZgsHraHTgDd+JosxAArsBmjgK+wKY+NTLVZaYnyXKS+4Xv+ PTYBYF9qTWieAY5zlif583DAFiFnPpG5rjyga+4L1xbF jRsJDWKerGLoLbnW5y7AejAQkhpxxRv9Ca+VJ5Wx4Shc7Q/a3m9/tgyMP8qQmMgMEgpataEbheuBgw/65E5 bQocUARDi4iCPRhsI2KYWrtN1JbucunxuKG9ymq3G4vO/InBP6A9ql gYMlwOdmAUVkVZLbwDOljSnKXkvGI2v8caEXVEat/OmjkNGU/qZyUngmH70pOBBTk9PF8dHbrDC6A6VVOFRIuvwC+DvlKlWpw== dao@servachog
Теперь проверим себя: попробуем подключиться в консоли при помощи команды svn к репозитарию при помощи протокола svn+ssh.
dao@servachog:~$ svn list svn+ssh://servachog/home/svn/digimedia.ru/trunk dao@servachog's password: svn: No repository found in 'svn+ssh://servachog/home/svn/digimedia.ru/trunk' dao@servachog:~$ svn list svn+ssh://servachog/home/svn/repos/digimedia.ru/trunk dao@servachog's password: .htaccess UserFiles/ _admin/ _cfg/ _create_tables/ _js/ _themes/ articles-full.xml articles-lite.xml articles.xml cnstats/ create.html dumper.php favicon.ico fckedit.log forum/ google4175cca555a80a32.html google4d2cb4725d2aaee4.html grep.password hp_conf.tar.bz2 i/ images/ include/ index.orig.html index.php index.php.orig init.php log/ missing.html news-companies-full.xml news-companies-lite.xml news-companies.xml news-latest-full.xml news-latest-lite.xml news-latest-yandex.xml news-latest.xml news-soft-full.xml news-soft-lite.xml news-soft.xml orig/ promote.html random_code_img.php redir.php robots.txt.orig styles.css test.php tools3256823/ tpl/ upload.html yandex_64af706361353c24.txt yandex_720f0a568d238360.txt
Кстати, обратите внимание: в командной строке в URI репозитария включается полный путь к репозитарию на сервере — svn+ssh://servachog/home/svn/digimedia.ru/trunk. (Курсивом выделена часть пути к репозитарию) Преодолеть эту ситуацию мне не удалось даже при помощи ключа -r — svnserve -r /home/svn/repos. Почему, кстати не знаю. Скорее всего это не баг, а некий реверанс в сторону безопасности хранимого проекта.
Использование плагина subversive при работе по протоколу SVN+SSH
Действия знакомые, уже все делали. Правда не прописывали ничего в закладку «SSH-settings». Причем, сразу решаемся не пользоваться логином/паролем от SSH-подключения, а используем созданный нами ключ. Все-таки, SSH-ключи намного безопаснее пароля и логина. Особенно, когда есть соблазн запомнить их в конфигурации проекта. Вирус, взлом, падение проекта… оно нам надо?
Да и вот еще что: если ключи сменились, или мы при подключении что-то выполнили неправильно, единственный способ исправить все, уничтожить все содержимое папки, в которой хранятся описания подключения к репозитарию. В моем случае, это директория "C:UsersDNA User.DNAPCworkspace". На более подробном уровне (т.е., где хранятся данные подключения к SVN-репозиторию), так и не разобрался.
Во-всяком случае, будте бдительны! Не выплесните из корыта вместе с водой и ребенка. Короче, не сотрите случайно вместе с данными, «накаченными» из репозитория данные, хранящиеся локально. Какой-нибудь там меганетленный проектик или еще что-нибудь в таком роде…
Открываем «File->New->Project->SVN» (первый из них)
Вписываем данные нашего сервера: URI-сервера, где находится SVN-репозитарий, логин и пароль, который перед этим прописали в файл /home/svn/repos/digimedia.ru/conf/passwd
Ну да, правильно: коннекторов-то и нет! А чтобы их поставить надо идти на сайт polarion.org и забрать их оттуда из репозитария (на данный момент — www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/).
Вот теперь, порядок!
Проект загружаем из папки trunk
Здесь нам предлагается настроить конфигурацию загружаемого проекта. Собственно, самое простое, выбрать «New project wizard». Т.е., после подключения к репозитарию и загрузки на локальный диск копии данных, можно выбрать рабочую «Песпективу» и жестко связать ее с проектом.
Здесь, как это говорится у математиков в известном анекдоте «а теперь мы выполняем ту операцию, которую делать уже умеем».
Правда, уже не нужно трогать настройку «Contents» — файлы складываются непосредственно в папку workspace. В остальном все также: используем PHP5, включаем поддержку JavaScript в проекте (раскраска, автодополнение и т.д.)
Следующим шагом выбраем дополнительные библиотеки (если они есть) и прописываем дополнительные переменные. В моем проекте используется ZendFramework.
и наблюдаем благостную картинку загрузки проекта…
Как говорится, дело сделано!
Использование плагина SubClipse для работы с SVN-репозитарием по протоколу SVN+SSH
Настройка TortoiseSVN
Сначала используем плагин Subversive (не забудем, у нас безопасная авториазция при помощи ssh-ключа). В работе с SSH этот плагин может использовать TortoiseSVN Надо бы поставить его на компьютер и прописать в переменных окружения переменную SVN_SSH.
В Windows Vista эту настройку установить оказалось несколько… непросто. Поэтому опишу ее здесь в трогательных подробностях: открываем панель управления (не в классическом виде), и ищем там «Переменные среды» (Environment variables), кликаем по ссылке «изменение системных переменных среды» и в открывшемся диалоговом окне выбираем «Переменные среды» Там прописываем новую переменную с именем SVN_SSH и значением C:\Program Files\TortoiseSVN\bin\TortoisePlink.exe. Причем, двойные обратные слэши в нашем случае важны. Без них плагин работать не будет!
Если нашли диалог с конфигурированием переменных среды окружения, прописываем туда переменную SVN_SSH:
Ну и сохраняем ее, естественно…
Используем плагин
Далее, выбираем «Projects->New->Project->SVN» (в данном случае, он второй сверху).
Опять выбираем создание новой записи о расположения SVN-репозитария.
Здесь у меня будет svn+ssh://servachog/digimedia.ru, а у Вас… даже представить себе не могу, что там будет у Вас.
Вариантов два: либо подключиться через SSH-канал, используя логин/пароль, либо при помощи SSH-ключа. Как всегда, выбираем SSH-ключ, как наиболее безопасный вариант подключения.
Я выбрал перейти в «Создание нового проекта»:
От плагина subversive этот отличается тем, что предлагает передать имя пользователя от имени которого будет производиться управление svn-репозитарием. И это удобно!
Подключемся к серверу и просматриваем дерево каталогов и как всегда выбираем директорию trunk с актуальным «проекта», как корневую:
А вот здесь будьте внимательны: можно сразу перейти к загрузке проекта, а можно сформировать свойства проекта, перейдя в меню «Новые проекты», как и при работе с subversive.
Если мы выберем «Checkout as a project configured using the New Project», то попадем в меню создания нового проекта. Снова выбираем «New PHP Project»
Настраиваем PHP-проект:
Подключаем «сторонние» библиотеки, если таковые имеются, и прописываем переменные окружения проекта, если это нужно (ну, скажем, для отладки!)
Наблюдаем картину «заливки» (отливки, поковки… металлургические какие-то термины у этих программистов) проекта на локальный диск.
Ну вот и сам проект…
Все получилось!