Перейти к содержимому



Настраиваем подключение к базе данных

#1

Поделиться сообщением #1



ShowPrint

ShowPrint
  • Пользователь PRO
  • 2 305 сообщений
  • Репутация: 591
2

Отправлено 08 Август 2017 - 11:05

Всем привет!

Вчера Янд выкинул одну из моих страниц из поиска, переписка с Платонами ясно дело показала что "сам дурак".

Решил поделиться с народом, вдруг кому пригодится.

 

Причиной удаления из индекса послужил какой-то временный глюк при коннекте к БД. Мне как-то в голову не приходило, что возможна ситуация с работающим сервером и отсутствием доступа к БД, посему она и не была "обыграна". Оказывается возможно и такое, соответственно надо предусмотреть и такой вариант.

 

При изначальном написании шаблона коннект к БД был реализован следующим образом:

function myDBConnect(){
	$_Link=@mysql_pconnect("localhost","user_name","user_password");
	if($_Link&&mysql_select_db("name_database")){
		mysql_query("SET CHARACTER SET cp1251_utf8");
		return($_Link);
	}
	return(FALSE);
}

myDBConnect() or die("Что-то пошло не так.<Br>Воспользуйтесь другим нашим сайтом: <a href='http://www.OtherSite.ru'>Резервный сайт</a>");

Собственно заглушка "что-то пошло не так" реализована для того чтоб "не терять посетителя" и дать ему возможность получить информацию на другом сайте, то есть всё-равно прийти ко мне )))

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

 

По результатам переписки с Платонами был несколько изменём коннект к БД:

function myDBConnect(){
	$_Link=@mysql_pconnect("localhost","user_name","user_password");
	if($_Link&&mysql_select_db("name_database")){
		mysql_query("SET CHARACTER SET cp1251_utf8");
		return($_Link);
	}
	return(FALSE);
}
if(!myDBConnect()){
	header('HTTP/1.1 503 Service Temporarily Unavailable');
	header('Status: 503 Service Temporarily Unavailable');
	header('Retry-After: 3600');
	die('Что-то пошло не так.<Br>Воспользуйтесь другим нашим сайтом: <a href="http://www.OtherSite.ru">Резервный сайт</a>');
}

Собственно добавленные header выдают 503-й ответ сервера http и говорят роботу "зайди ещё раз через часок". Со слов Платонов в этой ситуации робот должен оставлять страницы в индексе и не должен выбрасывать их из поиска.

 

Понятно что это будет выручать в случаях кратковременных траблов и не спасёт если сервак будет лежать долгое время или часто, но чтоб такого не случалось надо выбирать нормальный хостинг )))

 

Советую проверить свои сайты на предмет настройки отдачи 503-го ответа и, если таковая отсутствует, задуматься над тем, что лишней она не будет.

 

Всем пис, устойчивого стояния серваков и всего остального!


 

 

  • 2
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Использование ОДНОЙ базы mysql для двух сайтов
  2. Оптимизация БД под запросы
  3. Нет соединения с базой данных WordPress
  4. Полное руководство по созданию полноценного блога
  5. Сайт не работает. Ошибка установки соединения с базой данных

#2

Поделиться сообщением #2



PunPun

PunPun
  • Пользователь
  • 29 сообщений
  • Репутация: 4

Отправлено 08 Август 2017 - 12:37

Расширение mysql и его функции mysql_pconnect считаются уже устаревшими. Вам бы обновиться хотя бы до mysqli

function myDBConnect() {
	$link = mysqli_connect("localhost", "root", "", "zakaz.cc");
	if(!mysqli_connect_errno()) {
		mysqli_query($link, "SET CHARACTER SET utf8");
		return($link);
	}
	return false;
}
if(!($db = myDBConnect())) {
	header('HTTP/1.1 503 Service Temporarily Unavailable');
	header('Status: 503 Service Temporarily Unavailable');
	header('Retry-After: 3600');
	die('Что-то пошло не так.<Br>Воспользуйтесь другим нашим сайтом: <a href="http://www.OtherSite.ru">Резервный сайт</a>');
}
$result = mysqli_query($db, "SELECT * FROM post");
$row = mysqli_fetch_row($result);
print_r($row);

Соответственно и везде где есть mysql нужно заменить на функции mysqli. Соединение с p (mysql_pconnect (постоянное)) может вызывать ошибки.


  • 1

#3

Поделиться сообщением #3



ShowPrint

ShowPrint
    Topic Starter
  • Пользователь PRO
  • 2 305 сообщений
  • Репутация: 591

Отправлено 08 Август 2017 - 13:00

@PunPun, спасибо за замечание, обязательно приму к сведению!


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#4

Поделиться сообщением #4



Ixman

Ixman
  • Пользователь PRO
  • 2 574 сообщений
  • Репутация: 603

Отправлено 08 Август 2017 - 19:41

@ShowPrint, хорошее замечание, нужно взять на заметку


  • 0


#5

Поделиться сообщением #5



ShowPrint

ShowPrint
    Topic Starter
  • Пользователь PRO
  • 2 305 сообщений
  • Репутация: 591

Отправлено 09 Август 2017 - 09:58

нужно взять на заметку
Замечание из разряда "must be have", но как-то не всегда мы задумываемся о явном и логичном... (((

 

Спасибо Янду за сервис "важные страницы", который помог оперативно отследить и исправить этот момент - когда бы я ещё заметил выпадение страницы из поиска, а это потенциальная денежка... )))


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#6

Поделиться сообщением #6



Ixman

Ixman
  • Пользователь PRO
  • 2 574 сообщений
  • Репутация: 603

Отправлено 09 Август 2017 - 10:09

@ShowPrint, да уже применил идею к проекту, который на данный момент дорабатываю. Потом и на свои скрипты надо внедрить


Сообщение отредактировал Ixman: 09 Август 2017 - 10:09

  • 0


#7

Поделиться сообщением #7



ShowPrint

ShowPrint
    Topic Starter
  • Пользователь PRO
  • 2 305 сообщений
  • Репутация: 591

Отправлено 09 Август 2017 - 10:13

@Ixman, значит уже не зря написал  :)


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#8

Поделиться сообщением #8



miketomlin

miketomlin
  • Пользователь
  • 292 сообщений
  • Репутация: 47

Отправлено 09 Август 2017 - 12:08

503-яя – практически стандартная реакция на ошибки БД. die/or die – это отладочная техника. В реале лучше делать обработку по аналогии с 404-ой. Можно даже один и тот же шаблон использовать. Гляньте хотя бы на код из моей последней статьи. Подключение делается аналогично:

if ($link=mysqli_open()) { ... }
else error(503);

Только не нужно считать пустую выборку подобной ошибкой. Это либо 404-яя, либо даже 200-ая с сообщением вроде «Нет элементов».


  • 0

#9

Поделиться сообщением #9



ShowPrint

ShowPrint
    Topic Starter
  • Пользователь PRO
  • 2 305 сообщений
  • Репутация: 591

Отправлено 09 Август 2017 - 12:44

@miketomlin, давно тебя не было видно, тёзка  :)

 

В реале лучше делать обработку по аналогии с 404-ой
Я уже думал об этом, что надо бы в этом случае выдавать статическую (без использования БД) страницу, но как всегда пока не до этого  :lol:

Но в файл плановых работ над сайтом этот пункт уже записан  ;)


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#10

Поделиться сообщением #10



miketomlin

miketomlin
  • Пользователь
  • 292 сообщений
  • Репутация: 47

Отправлено 09 Август 2017 - 13:13

Статическую – это частный случай, если вы именно так формируете страницы ошибок. В общем же это практически такая же страница, как и все остальные, только со спец. статусом и заголовками вроде Retry-After. Т.е. она собирается из кусков, может иметь вариативность, например соотв. сообщение на каждый/опред. вид ошибки. Обвес осн. контента в шаблоне, естественно, должен браться из кеша, ну или по крайней мере не из БД, либо должен использоваться т.н. «бедный» шаблон с максимумом статика. Иными словами, страница динамическая, но не использующая БД.


Зы... увидел уточнение в скобках :) Но все же лучше не называть страницу, не использующую БД, статической.


Сообщение отредактировал miketomlin: 09 Август 2017 - 13:10

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru