Как установить PhpMyAdmin на сервер и настроить htaccess

Почти у каждого хостера, с которым вам доведется или довелось встретиться, панель управления MySQL под названием PhpMyAdmin установлена. Сегодня это своеобразное правило хорошего тона. Сразу напрашивается вопрос: а что, если отсутствует? На самом деле – ничего страшного, установим сами! Дело несложное.

Инсталляция панели PhpMyAdmin

Итак, будем считать, что один из новейших дистрибутивов PhpMyAdmin’а вы уже скачали. Я нашел у себя сентябрьский релиз версии 2.6.4. Распакуйте файлы из архива в отдельную папку. Давайте хорошенько разберемся в содержимом, ведь кое-что здесь в дальнейшем совершенно не понадобится. Можно удалить, например, *.txt, *.html, Readme и файлы без расширения в корне папки. Поддержка многих языков (каталог /lang) также вряд ли пригодится. Короче, оставляем все самое необходимое, на собственное усмотрение.

Скомпилированный дистрибутив важно проверить на работоспособность. Здесь, как всегда, поможет виртуальный сервер «Денвер». В домашнем каталоге (/home/localhost/www/) создадим папку, где будет располагаться новый PhpMyAdmin, и копируем туда файлы дистрибутива. Ну вот, все готово, даже конфигурационный файл необязательно править. Тестирование PhpMyAdmin’а производится по адресу “localhost/имя созданного каталога” (не забывайте: сервер должен быть запущен).

Работает – ОК. Но подумайте, что будет, если перенести данный дистрибутив на удаленный сервер без изменений? Любой посторонний, зная путь к PhpMyAdmin’у, сможет свободно воспользоваться его услугами. Поэтому мы проведем необходимые меры по предостережению, отредактировав config-файл комплекса PhpMyAdmin – сonfig.inc.php. Как и раньше, советую использовать текстовый редактор с подсветкой синтаксиса и нумерацией строк, что-то вроде GridinSoft Notepad. В конфигурационном файле нас интересуют следующие сроки:

// метод аутентификации  (основанный на config, http или cookie)
   $cfg['Servers'][$i]['auth_type']  = 'http';
   // пользователь MySQL
   $cfg['Servers'][$i]['user'] = 'user';
   // пароль для MySQL-БД(только для config-доступа
   $cfg['Servers'][$i]['password'] = 'password';
   

Метод аутентификации (удостоверения) выставляется строго ‘http’ – в целях защиты доступа к базе данных. Метод «http» избавляет от необходимости хранения личных данных (‘user’, ‘password’) в конфигурационном файле. Логин/пароль вводятся при каждом соединении с PMA. А вот для локального сервера лучше использовать метод удостоверения по умолчанию – config. При config-аутентификации обязательно задействуйте имя пользователя и пароль: только тогда вы получите доступ к БД. Еще отмечу интересную опцию: вписав пользователем ‘user’, вы получите доступ ко всем имеющимся на хосте (на локальном сервере – localhost) базам. Значение [‘password’] для БД в данном случае необходимо оставить пустым… Почти все. Осталось в строке

$cfg['Servers'][$i]['host'] = 'localhost'

изменить или оставить как есть адрес хоста. Хост, разумеется, указывает хостер. Настройка PhpMyAdmin’а закончена, комплект готов к отправлению на сервер.

Работа с БД через PhpMyAdmin

Как театр начинается с вешалки, так и программа – с интерфейса. Интерфейс PhpMyAdmin’a несложен, он делится на боковую панель с возможностью выбора БД и основное поле, содержащее несколько вкладок. Ознакомимся с первыми тремя, на мой взгляд, самыми важными:

Структура – содержимое вкладки наглядно демонстрирует содержимое базы: количество таблиц, кодировку, размер каждой и т. п. С таблицами можно совершать различные действия: как по отдельности (просмотреть содержимое, выполнить запрос, создавать и уничтожать), так и массово (то же удаление, очистка, проверка, оптимизация). Последняя, кстати, весьма полезная функция – рекомендую. Пример: в БД содержится ~ 60 таблиц, общий размер – 320 kb. После десятисекундных действий база «худеет» до 266.5 kb. Оптимизация!

SQL – уже знакомая нам вкладка. Наряду с соседней, Экспорт, она очень важная. По этому адресу пользователю доступны импорт таблиц в базу данных и выполнение запроса. От его составителя, натурально, требуется уверенное знание основ SQL-синтаксиса. К сожалению, формат статьи не позволяет изложить тему составления запроса в подробностях. «На пальцах» же объяснить тоже не удастся. Тот, кто заинтересуется языком SQL, пусть обратится к старым номерам КГ – в газете 3 года назад публиковались замечательные статьи Д. Мигачева, в частности, о SQL. Масса толкового материала есть и в Интернете (см. “Ссылки в помощь”). В любом случае, кое-что прояснится, если вы откроете SQL-файл и хотя бы поверхностно изучите его код. Импорт SQL-дампа – тоже запрос.

Экспорт – создание дампа таблиц БД. Данная функция нужна, например, для того, чтобы получить резервную копию базы. Процесс этот несложный. В колонке под надписью “Экспорт” выделите таблицы, тип – SQL. В опциях SQL выберите дополнительные условия (по надобности). В опции SQL export compatibility обычно выставляется none, но если нужно обеспечить совместимость таблиц с MSSQL, ORACLE, MySQL 3.x – 4.x и т. п., выбирайте желаемое из списка. Тип экспорта – Insert (вставка), Update (обновление) или Replace (замена). Insert используется в том случае, если импортируемых впоследствии таблиц в другой базе нет. В случае если таблица с таковым именем уже имеется, PhpMyAdmin выдает предупреждение, что «table is exists». Для желаемого результата попробуйте параметры Update / Replace либо опцию If not exist.

“Последний штрих” -– выбор сжатия. Однозначно ставим Gzip (жаль, что 7z нету :)). После нажатия на кнопку Go! дамп базы сохраняется на компьютере. Советую вам делать резервную копию базы как можно чаще: не только перед обновлением CMS, но и без особых причин. Поспрашивайте у своего хостера, делает ли он backup пользовательских баз данных, и если да, то как часто. Возможно, вопрос резервирования БД с вашей стороны отодвинется на задний план.

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

Мы еще не рассмотрели второй вариант публикации сайта. Итак, как же произвести перенос CMS и базы данных на сайт? Процесс состоит из двух-трех этапов. Сначала вы должны закачать на удаленный хост все файлы движка, опять же, с измененным конфигом. Второй шаг – импорт таблиц локальной базы данных в базу «интернетовского» сервера. Для этого посредством PhpMyAdmin’а сделайте полный дамп таблиц вашей БД с «Денвера», а затем, открыв PMA на удаленном сервере, выполните запрос (вкладка SQL) из ранее экспортированного файла.

Если вы не уверены, что ваша база данных существует в Сети, советую сделать проверку. А поможет в этом маленький php-скрипт:

<?
    $link =  mysql_connect("dbhost", "login", "pass")
   or  die("Невозможно подключиться…");
   mysql_close($link);
   ?>
   

, где dbhost – адрес сервера БД, login – имя пользователя БД, а pass – пароль. При неудачном соединении выдается строка “Невозможно подключиться…”

После импорта данных необходимо зайти в админ-панель движка и навести порядок. Чаще всего приходится изменять пути каталогов (был, скажем, localhost/forum – станет site_name/forum), какие-никакие настройки. Если вам повезет, то после указанных действий сайт заработает.

Однако не всегда все складывается удачно. К сожалению, иногда (и довольно часто) возникает проблема несовместимости. Наиболее распространенная связана с конфликтом разных версий MySQL. База данных, экспортируемая с MySQL <4.1, вряд ли будет корректно распознана на более поздних релизах СУБД. Виной тому – проблема с кодировками windows-1251 и UTF8. Частичное решение конфликта нашли разработчики Денвера, но – по своему опыту знаю &? действует оно не всегда. Еще более остро обстоят дела с MySQL 5, где SQL-запросы из старых версий и вовсе не выполнишь. Проблем много, и одним из рациональных решением с вашей стороны будет обновление СУБД «Денвера» до MySQL 5. Или смена хостера :).

Вообще, проблема несовместимости возникает и при «чистой» инсталляции CMS на сервере. Приятно заметить, что многие разработчики CMS своевременно предоставляют свежие заплатки под новые версии MySQL, предоставляют возможность выбора типа установки. Бывает и наоборот – пользователи CMS раньше самих разработчиков устраняют недостатки любимого движка. Возьмем Subdreamer.

Узнать о серверном ПО вашего хостера можно не только через сайт поддержки, но и с помощью нижеследующего php-запроса:

<? phpinfo() ?>

Введение в SSH

Одним из минусов стандарта Telnet является его незащищенность. При определенных навыках «выловить» данные между двумя источниками, использующими протокол уязвимый, без шифрования, не составит великого труда. Но сравнительно недавно (в 1995 г.) на смену прибыл протокол SSH (Secure Shell), по функциям очень cхожий c Telnet’ом, но намного более безопасный и… интересный. Отличают две версии протокола – SSH1 и SSH2 (1998 г.). На серверах чаще всего используется позднейшая версия, поскольку она обладает значительным преимуществом перед первой. С получением услуг SSH открываются, без преувеличения, очень большие возможности. Кто имеет опыт работы с любой из ОС семейства Unix, оценит по достоинству. Ну а тем, кто с «униксоподобными» и вовсе не знаком, сначала придется поучиться. Тяжело в учении – легко в бою :).

Протокол SSH, скажу, не из легких для освоения, но теперь все больше хостеров предлагает его использование. Например, на Holm’е работать с базами данных возможно только по SSH2. (Я, думаю, привел не лучший пример: мало кто разместит свой сайт у упомянутого хостера :)). А на хостинге www.host.sk shell-доступ уже используется по умолчанию, хотя совсем недавно «просил» отдельной регистрации. Жаль, что по качеству эта услуга уступает аналогичной на Holm’е… Так вот, протокол SSH замечателен тем, что он обеспечивает выполнение команд на удаленном сервере (вам выделяется shell-аккаунт с сильно ограниченными правами) и копирование файлов без надобности FTP. Все это дополняется мощным шифрованием и сжатием передаваемых данных. Какие программы мы задействуем? Традиционно используются две: Putty и/или WinSCP3. С моей, пользовательской, точки зрения, WinSCP как нельзя подходящий для различных операций с файлами, а Putty – для командной работы (хотя у WinSCP тоже есть терминал). Приведу один пример. Представьте: есть директория /forum в корне сайта. Как она удаляется через FTP-клиент? Каждый файл «уходит» по отдельности. В WinSCP, который использует не FTP, а SCP, папка /forum удалится мгновенно. Еще вариант. Архивируем сконфигурированный движок в формат gz и копируем архив на сервер, там его и распаковываем (команда gunzip). Таким образом мы существенно сократим время. Это мелочи, конечно, но мелочи приятные. Добавьте сюда безопасность SCP/SSH-канала – и WinSCP однозначно можно считать лучше любого FTP-клиента.

Лучшие FTP-клиенты для Windows и Mac OS

Касательно работы с MySQL. PhpMyAdmin, упоминаемый выше, все-таки удобнее. Но ввиду того, что на серверах скрипт работает не всегда, SSH-вариант не станем исключать. Нам понадобится Putty, а еще прочные знания о MySQL. Если со знаниями проблема, начинайте изучать СУБД – в теории плюс на практике. Как известно, MySQL – продукт мультиплатформенный, поэтому запросы из командной строки в Windows должны совпасть с таковыми в *nix. Cmd.exe к вашим услугам! :). В «Денвере» exe- файл MySQL расположен по адресу /usr/local/mysql4(5)/bin/mysql.exe (не забудьте запустить сервер).
Заходим под своим именем и паролем:

mysql -u p; выбираем БД: use

— и изучаем!

Но мы говорим о shell-доступе, не так ли? Сейчас я покажу, как произвести импорт/экспорт SQL-дампа по протоколу SSH. Итак, вы авторизовались на сервере (кстати, пароль в Putty при наборе не показывается) и, скорее всего, попали в Bash, один из «униксовых» терминалов. Собственно экспорт таблиц производится запросом:

mysqldump —add_drop –u -P -h -p | gzip -c >file.sql;

а импорт из файла:

mysql – -p -h -P < file.sql

Пояснения ко всему предыдущему: user> – пользователь БД, port> – порт для подключения к серверу (на HOLM’е – 3306), dbhost> – хост БД, password> – пароль к БД, dbname> – имя БД.

Полезные утилиты и команды в Unix:

help – справка
get/put – закачка/получение данных
ls -al – показать содержимое текущего каталога
cd – выбор/смена директории
cp – копировать
mkdir – создать директорию
mysqldump – получение резервной копии баз данных
man – справочная информация по команде (напр., man mysqldump) ftp – FTP-клиент
gzip – популярный gz-архиватор
gunzip – разархивировать gz-архив
chmod – установка прав доступа
mc – файловый менеджер наподобие Norton Cmd

Настройка директивы .htaccess

Напоследок, когда все более-менее важные вопросы уже рассмотрены, расскажу вам о волшебном файле .htaccess. Изменение его содержимого повлияет на работу сервера Apache. Каждый такой файл должен находиться в директории, к которой применяются настройки.


   // Файлы индексного документа
   DirectoryIndex index.html index.htm index.php 
   // Документы в кодировке windows-1251
   AddDefaultCharset windows-1251
   // Воспринимать файлы .html как ssi 
   AddHandler server-parsed .html
   // Разрешение показа содержимого каталога 
   Options +Indexes
   // Не выдавать сообщение об ошибках при обработке РНР
   php_value error_reporting 7
   // Запрет всем пользователям посещать сайт (раздел)
   deny from all
   // Запрет пользователю с означенным IP-адресом посещать сайт/раздел
   deny from ххх.ххх.ххх.ххх
   // Нахождение файла с информацией об ошибочном запросе
   ErrorDocument 404 /error404.html
   // Запрет входа через прокси
   RewriteEngine On
   RewriteCond %{HTTP:VIA} .+

   RewriteRule (.+) http://sitename.com/
   

Я перечислил лишь некоторые из многочисленных опций директивы. На самом деле, .htaccess умеет защищать определенные каталоги паролем, преобразовывать «динамические» адреса в «статические» и др. Единственное НО: в редких случаях некоторые «особо заботливые» хостеры htaccess-директивы отключают.

Термины и их пояснения

Кэш (англ. cache) — это промежуточный буфер с быстрым доступом, который хранит в себе ту информацию, которая с наибольшей вероятностью может быть запрошена (из Википедии)
SSL – (англ. Secure Sockets Layer — протокол защищённых сокетов) — криптографическая технология, обеспечивающая безопасную передачу данных в сети Интернет
Дамп (англ. dump – выбрасывать, выгружать) – здесь: снимок таблиц БД
SQL-запрос – набор специфических команд, составленных по правилам языка SQL

***

Вот и все, что мне хотелось вам рассказать про создание сайта на бесплатном хостинге. Если последняя статья вызвала затруднения, обращайтесь — постараюсь ответить. Также пишите, рассказывайте про собственные работы – обсудим вместе. Успехов вам!

Ссылки в помощь:

  • www.php-myadmin.ru – русскоязычный сайт поддержки PhpMyAdmin’a. В документации (/doc) подробно рассказано об установке и настройке панели, а также о http-, config- и cookie- аутентификации
  • Cписок некоторых «униксовых» команд
  • Ssh FAQ (русская редакция)