Локальный веб сервер

Безусловно, вести разработку локально гораздо удобнее, чем удалённо. А для этого необходимо иметь на компьютере развёрнутый веб сервер. Администратор из меня не ахти какой выдающийся, поэтому я предпочитаю использовать сборки. Которых, кстати, более чем хватает для всех моих нужд. Самая первая сборка, с которой я познакомился, это Denwer. Она довольна проста в установке и имеет ряд преимуществ:

    Небольшой размер
    Быстрая и простая установка
    Автоматически ставится Zend Optimizer, что несколько ускоряет работу сервера.
    Так же из коробки ставится эмулятор мэйл сервера, который позволяет "отправлять" емейлы. На самом же деле они закидываются в папку на сервере в виде текстовых файлов вместе с заголовками и содержимым емейла. Очень удобно.

Но и есть один серьёзный недостаток - сервер получается неполноценным. Отсутствует множество библиотек и дополнений, которые придётся ставить самому. Например, даже широко используемый cURL придётся скачивать и ставить самому.

Подытожим: Denwer хороший веб сервер для новичков. Вам не надо заботиться об установке сервера и его настройке - это сделано за вас. Однако при более серьёзных разработках придётся искать что-то посерьёзнее. Кстати, работает только под виндой ;)

Следущий веб сервер, к которому я перешёл (и который в большинстве случаев использую по сей день) - это XAMPP. Полноценный веб сервер, даже с дополнительными аддонами. Не сложен в установке. Включает в себя основной набор php библиотек для разработки. Покрутив немного настройки php и mysql можно сделать вполне себе шустрый веб сервер.

Из недостатков - включает в себя довольно сложно настраиваемый почтовый сервер, в котором не каждый разберётся.

XAMPP - веб сервер, который придётся немного покрутить, но оно того стоит. Кстати, кроссплатформенный, поэтому можно им пользоваться на любой ОС. Я им пользовался больше года и с большего был доволен результатами.

Ещё один продукт, на который советую обратить внимание - это разработка компании Acquia (для тех, кто в танке - фирма создателя Друпала). Они предлагают ставить Друпал на их Dev Desktop. Стоит отметить, что этот веб сервер не включает в себя что-то очень интересное или мощное. Обычная среда разработки с предустановленным Друпалом. Зато имеет удобный веб интерфейс по управлению сайтами и сервером.

Ну и сладкое на закуску. Не так давно вышел Open Server. Очень и очень рекомендую. Графический интерфейс, разные версии PHP / Mysql в коробке, возможность переключаться между Apache / Nginx и многое другое. Я даже скриншот сделал одной из вкладок с настройками:

http://s5.uploads.ru/irwyp.png
Со скоростью работы у него тоже очень даже неплохо. На данный момент - это мой выбор.
IDE (интегрированная среда разработки)

Теперь о том, в чём я пишу. Первый год разработок мне вполне хватало обычного блокнота notepad++. Очень удобный блокнотик с подсветкой синтаксиса. Из преимуществ - быстрое открытие / закрытие документов, минимализм, очень удобный интерфейс. Пока не началась серьёзная разработка высоконагруженных и объёмных сайтов - большего мне не требовалось.

Однако разбираться в чужих проектах, которые писались другими программистами, с помощью блокнота было сложно. К тому же, всё чаще возникала необходимость пошаговой отладки кода. Поэтому пришлось пересесть на IDE. По рекомендациям других разработчиков выбор пал на PhpStorm. В своём я не разочаровался до сих пор. Эта IDE имеет массу удобств. Из моих любимых:

    Возможность работы с системами контроля версий (об этом я ещё расскажу)
    Умный автокомплит
    Возможность пошаговой отладки кода
    Рефакторинг кода
    Поиск TODO комментариев
    Отображение стека вызова функций
    Удобный интерфейс

Выглядит она так:

http://s5.uploads.ru/gIxm8.png
Из более-менее достойных альтернатив этой среде разработки - NetBeans. Однако я PhpStorm'ом доволен, и менять его на что-то другое не собираюсь.
Система контроля версий

Когда сложность сайта выходит за рамки визитки, разработка начинает занимать продолжительный период времени. В процессе разработки случится может что угодно - вплоть до того, что приходится возвращаться назад и удалять последние изменения. В случае обычного сохранения данных они будут просто перезаписаны и потеряны. Система контроля версий позволяет делать своеобразные срезы времени, к которым можно вернуться в любой момент и получить код, сохранённый в этих срезах.

К тому же, если над сайтом работает больше одного человека, система котроля версий просто необходима. Она позволяет объединять наработки программистов в одном месте (в репозитории) в единое целое, учитывая все предыдущие изменения. Пользуясь такими системами программисты всегда могут получить актуальную версию сайта с последними наработками коллег, а так же поделиться со всеми своими.

Краткий принцип работы систем контроля версий:

    Имеется некое пространство, куда помещаются данные проекта (репозиторий)
    У каждого программиста установлен локально клиент для работы с репозиторием.
    В любой момент времени программист может отослать данные в репозиторий (это называется коммитом). Данные в репозитории будут объеденены с теми, которые там находились.
    В любой момент времени программист может запросить актуальные данные из репозитория. Данные будут объеденены с теми, которые находятся на компьютере программиста.
    В любой момент времени программист может как локально, так и в репозитории откатить данные к определённому коммиту.

Более подробно можно почитать на википедии.

Систем контроля версий много. Я пользуюсь git'ом. К слову, эта же система используется на drupal.org для работы с проектами.

В качестве репозитория я предпочитаю github.com. С его помощью можно подключаться к внешнему репозиторию и хранить все данные в нём.

У себя я использую консоль по работе с гитом. Некоторые разработчики предпочитают работать с ним через графический интерфейс с помощью TortoiseGit.
Миграция данных между локальным и внешним сервером

Рано или поздно, сайт с локального сервера придётся переносить в Интернеты. Процесс переноса разбивается на две части:

    Перенос базы данных
    Перенос файловой системы

И если с переносом файловой системы всё просто - достаточно запихать данные в репозиторий, а потом с сервера их забрать, то с базой данных у меня два принципиально разных подхода.

Подход первый. Общая база данных.

Есть очень интересный подход, позволяющий использовать внешнюю базу данных как локальную. То есть БД реального сайта на внешнем сервере, но все данные в неё пишутся с локального сервера. Визуально это ничем не отличается от работы с локальной базой. То есть вы работаете у себя где-нибудь на http://localhost/site, добавляете материал, меняете настройки сайта и т.д. А в это время все изменения делаются не в локальной БД, а в базе реального сервера. Объясню на примере.

Этот трюк я постоянно проделываю на хостинге it-patrol.ru. У них внешний доступ к базе данных закрыт, однако можно пробросить по SSH туннель к ней (инструкция). После открытия туннеля в settings.php прописываете порт, на который открыт туннель - и получаете профит.

Второй подход. Ручное копирования базы.

Метод банален до безобразия. Копируем базу с локального сервера и закидываем на внешний. Но тут стоит остановиться на методах импорта и экспорта данных:

1. Экспорт и импорт с помощью консоли.

mysqldump my_database --user=username --password=my_password > my_dump.sql

и

mysql -u username -p database < my_dump.sql

2. Работа с базой с помощью phpmyadmin. Этот скрипт установлен на большинстве хостингов, поэтому наиболее популярен среди разработчиков. В принципе, допольно удобный, однако не всегда надёжный. По моей личной статистике, в 10% случаев с ним возникают проблемы при импорти либо экспорте базы. Хотя от его использования я до сих пор полностью не могу отказаться.

3. Копирование и восстановление данных при помощи модуля backup_migrate. Хороший и удобный модуль. Пользуюсь им в 50% случаев.

4. Использование скрипта Sypex Dumper. Достаточно надёжный и удобный. Быстро работает, имеет приятный интерфейс. Пользуюсь в 40% случаев.
Прямая работа с базой данных

Ковыряться в базе данных приходится постоянно. Раньше я делал это через phpmyadmin, однако нашёл более удобную утилиту - HeidiSql. Имеет приятный интерфейс и массу приятного функционала. Например, подсчёт статистики команд в запросах к базе; список активных процессов; удобный доступ к настройкам mysql и многое другое. Выглядит она так:http://s5.uploads.ru/GzIfx.png
Заключение

Данная статья не является каким-либо эталоном среды разработчика. В ней описан мой опыт разработки и используемых при этом инструментов. Безусловно, если вы покажите что-то лучшее - с удовольствием поэксперементирую с чем-то новым.