9 subscribers

Перенос сайта на платформу хостинг-провайдера REG.ru

Перенос сайта на платформу хостинг-провайдера REG.ru

Решил возродить свой старый интернет проект (miniXpress.ru). Мой предыдущий хостер (хостинг-провайдер) был продан REG.ru и мой личный кабинет перешёл к ним. Проект стоял на паузе более 4-х лет. Я, конечно, допускал, что перенос сайта на ресурсы другого хостера может не быть безболезненным, но я и предположить не мог, что меня ждёт так много неприятностей. Для опытного IT’шника это, возможно, пара пустяков, но я регистрирую домены и заливаю сайты, мягко говоря, не каждый день, а вернее делал это всего один раз и то было 7 лет назад.

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

После оплаты на почту стали приходить многочисленные письма. Я решил, что всё готово и ринулся в бой. У предыдущего провайдера я заливал сайт через фтп-клиента. Настроил доступ через Total Commander и аля-гоп. Разбираться в других вариантах доступа не хотелось. К своему удивлению паролей доступа на фтп в почте я не обнаружил. Начал нервничать и искать контакты службы поддержки. Почему-то их не оказалось под рукой. Зашёл в личный кабинет и стал изучать его возможности. Пока тыкался по вкладкам пароль обнаружился. Оказывается, не нужно было спешить. После оплаты желательно подождать некоторое время пока всё активируется. На это требуется минимум пол часа, гарантировано час. Пароли оказались доступны в личном кабинете. Это пароль доступа к панели управления хостингом, доступ к FTP и доступ к MySQL. Через панель управления я вошёл в phpMyAdmin. Со своего локального сервера (у меня XAMMP) экспортировал базу. Первоначально попробовал экспортировать все базы одномоментно, но в хостинг этот файл не получилось импортировать. Затем экспортировал одну базу (не таблицу, а именно базу со множеством таблиц) и всё получилось. К слову сказать, для одного проекта (сайта) у меня одна база. Затем залил сайт.

Изначально свой первый проект я делал без баз. Но постепенно он развивался и вот уже даже начальная страница требует подключения к базе, чтобы правильно отображаться. Я знал, что сразу после заливки не заработает, но всё оказалось намного хуже. Забегая вперед, скажу, что я столкнулся сразу с двумя или даже с тремя проблемами, которые выстрелили одновременно:

  • Не подключилась база;
  • Все русские тексты превратились в абракадабру;
  • Третья всплыла чуть позже, это ошибка «Warning: session_start(): Cannot start session when headers already sent in …».

Подключение к базе

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

рис. 1 Пароль доступа
рис. 1 Пароль доступа
рис. 1 Пароль доступа

Подключение к базе MySQL делается вызовом операторов с соответствующими параметрами. Для пущей наглядности я записал это в 2-х вариантах, используя данные, присланные хостером.

$link = mysql_connect("Host", "Логин", ”Пароль”) or die("Could not connect: " . mysql_error());
или
$link = mysql_connect("localhost", "u12345_default", ”DimonReg”) or die("Could not connect: " . mysql_error());
рис. 2 phpMyAdmin
рис. 2 phpMyAdmin
рис. 2 phpMyAdmin

И выбор конкретной базы. Имя базы по умолчанию – это то, что находится в phpMyAdmin (рис. 2). Когда я импортировал свою базу, то она прописалась с именем 'u12345_xpertpress':

mysql_select_db('Имя базы') or die ('Can\'t use базу: ' . mysql_error()."<br>");
или
mysql_select_db('u12345_xpertpress') or die ('Can\'t use базу xpertpress: ' . mysql_error()."<br>");

Однако мне не повезло. Все мои танцы с бубном и хождение за три моря по просторам интернета результата не принесли. Я начинал унывать. Но вдруг обратил внимание на упоминание в поисковой выдаче некоего MySQLi. Improved – улучшенный. А по-моему – hemorrhoIds, от слова геморрой. Ну зачем улучшать то, что и так хорошо работает? И ладно бы выбор бы был, но нет хостер REG.ru не поддерживает MySQL, а поддерживает только MySQLi. Надеюсь, что моё маленькое открытие сэкономит вам время и нервы. В MySQLi всё выглядит лаконичней:

$link= mysqli_connect("Host", "Логин", ”Пароль”, "Имя базы") or die("Could not connect (Не могу подключиться): ".mysqli_connect_error());
или
$link = mysqli_connect("localhost", "u12345_default", ”DimonReg”, "u1256820_xpertpress") or die("Could not connect (Не могу подключиться): ".mysqli_connect_error());

К моей радости мой локальный сервер XAMMP поддерживает MySQLi и мне не пришлось разделять код для локального сервера и хостинга, либо переустанавливать локальный сервер. Однако одна особенность есть. Если база подключена через функции MySQLi, то MySQL функции уже работать не будут. В принципе, за небольшим исключением, функции MySQL и MySQLi похожи и замена кода не превратилась в ад.

Первый этап пройден, база подключена, однако, абракадабра не исчезла.

Борьба с абракадаброй вместо русского текста

Яndex-поиск мне в помощь. Абракадабра проблема не новая и люди научились с ней бороться. Опущу этапы борьбы, перейду сразу к сути – необходимо все файлы php, htm, html, txt и другие, т.е. ВСЕ текстовые файлы перевести в кодовую страницу UTF-8 без BOM (т.е. с выключенным BOM). BOM важно выключить, я сперва не выключил, т.к. не заметил разницы, но если BOM не отключить, то не будет работать функция session_start().

рис. 3 Абракадабра
рис. 3 Абракадабра
рис. 3 Абракадабра

Как перекодировать? Советуют редактор NotePad++ (Блокнот с расширенным функционалом), у меня встроенный AkelPad. Всё верно, этот редактор и показывает в какой кодовой странице файл и позволяет его конвертировать в любую другую. Однако файлов у меня накопилось на несколько сотен и ручной режим конвертации, прямо скажем, серьёзное испытание воли. Сначала я попробовал организовать пакетную обработку, но имеющимися средствами этот вопрос решить не удалось, затем я стал рыскать в интернете и почти нашёл – товарищ описывал работу с программой и давал ссылку на скачивание, но ссылка оказалась битой. После неудачных поисков я решил работать вручную. Меня хватило на 52 файла (чтобы не запутаться я конвертировал все файлы из одной директории). С трудом закончив я продолжил поиски программы для пакетной обработки. Не скрою, поиски были не простыми, но ищущий был вознаграждён – я скачал программу «recoder-v2-3-0.win32» и она отлично себя показала. Программа позволяет конвертировать файлы из одной кодовой страницы в другую, удалять или устанавливать BOM. Делает это с директориями и поддиректориями, а для выбора файлов позволяет использовать маску. Одна особенность. Выше я уже писал, что переконвертировал вручную все файлы из одной директории. Мне показалось это важным. И действительно, в программе «recoder-v2-3-0.win32» кодировка файлов задаётся пользователем. Предполагается, что исходная кодовая страница файлов вам известна, сама программа распознавать кодировку не умеет. Если указать неправильную кодировку файла и затем конвертировать его, то прочитать русский текст из такого файла не сможет даже «Блокнот ++».

Выдохнул, вроде работает. Остались, конечно, мелкие глюки, но это цветочки, исправим. Но радоваться случилось не долго…

«Warning: session_start(): Cannot start session when headers already sent in …»

Функцию session_start() я включил в свой проект, когда задумался о создании регистрации на сайте. Это наиболее простой способ создавать и передавать переменные из одной страницы в другие в рамках одного пользователя (одного компьютера). И на предыдущем хосте и на локальном сервере (напомню у меня установлен XAMMP) всё работало. А на проекте REG.ru такая оказия – печалька.

Для паутины такая проблема не новость, однако, страниц с подробным описанием решения проблемы нашлась всего одна. Автор предлагал не ставить закрывающий тег php «?>» если далее нет html-кода. Иными словами, если файл это php-скрипт, то закрывающий тег не обязателен, а даже вреден. Но это оказался не мой случай. Дальше только форумы. Не то чтобы на форумах пишут ересь, вовсе нет, но там как-то всё предельно сжато, а я ни разу неспециалист в этой области и не то что сленга, но даже терминов не знаю. Но запасаюсь терпением и вперёд. В каком-то смысле мне повезло. Похожий вопрос задавал новичок и просил Гуру отвечать подробней. В общем благодаря этому, а также моим экспериментам, вопрос удалось решить. Во все файлы-страницы сайта пришлось включить код:

<?php
session_start();
header("Content-type: text/html; charset=utf-8");
?>

До этого функция session_start() вызывалась из файла с меню, а этот файл един для всего сайта. Но вызову предшествовал код, а это вызывало ошибку. Также на этом этапе стало ясно, что BOM следует отключать, т.к. с включённым BOM функция session_start() не работает. Важное замечание, которое я понял не сразу этот код должен быть в САМОМ НАЧАЛЕ фала, в том числе и раньше комментариев. Иными словами, сперва этот код, а потом уже комментарии и всё-всё-всё.

Пару слов об ssl-сертификате

Регистратор и хост-провайдер REG.ru также предлагает SSL-сертификаты, причём часто в подарок. Вообще сертификаты делятся на 3-и уровня. DV – проверка домена; OV – проверка компании; EV – расширенная проверка ЮР-лица – зелёная строка в браузере.
Не буду сообщать своё мнение об этой затее, напомню, что активное внедрение SSL-сертификатов началось в 2016 г. Нужны они якобы для защиты пользователей интернета, ну допустим. SSL-сертификат уровня DV просто кодирует трафик сайта, т.е. защищает его (трафик) от возможного перехвата. А вот если сайт оказывает услуги или интернет-магазин, то требуются сертификаты 2-го или 3-го уровня.

Как я уже упоминал, REG.ru предлагает SSL-сертификаты в подарок. Следует понимать, что это сертификаты начального уровня, т.е. SSL-сертификаты уровня DV – ну тоже неплохо.

Итог

Три дня геморроя и сайт снова в строю. Хотя нет, некоторые глюки всё-таки ещё остались и предстоит глубокое тестирование. В принципе, претензий к REG.ru у меня нет, современная платформа, защита, оперативность, большой выбор услуг. Продуманный интерфейс (юзабилити, блин - что за слово), обилие инструкций и помощи. В итоге, я, делающий это второй раз в жизни, сам во всём разобрался без прибегания (т.е. мне не потребовалась) к службе поддержки. Ещё один приятный сюрприз, сделанная ранее служба рассылки, на новом хосте заработала без переделок, хотя и имя домена сменилось. Короче говоря, REG.ru рекомендую. Воспользуйтесь этим промокодом (754B-3199-0123-0697) и получите скидку на все услуги компании в размере 5%.

Друзья, с удовольствием прочту и отвечу на ваши комментарии. Ещё больше материалов о полиграфии Вы найдёте на нашем сайте doPRESS.ru