[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: При зависании бд отправить письмо
leshiy
При зависании бд нужно что бы автоматом отправлялось письмо на почту.

<?php
$host="localhost";
$user="admin";
$password="12345";
$db="baza";
mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db) or die("Нет соединения с БД".mysql_error());
?>
Zzepish
в die запиши функцию отправки данных на почту
inpost
Перехватывай ошибку mysql_connect, то есть не or die, а именно как говорится в документации на php.net. Если ошибка случилась, то отправляй письмо. Не забудь идентификатор "письмо отправилось" добавить в каком-нибудь файле "db.txt", иначе тебя заспамят wink.gif

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
leshiy
Цитата (Zzepish @ 25.08.2015 - 12:59)
в die запиши функцию отправки данных на почту


<?php
$host="localhost";
$user="admin";
$password="12345";
$db="baza";
mysql_connect($host, $user, $password) or die("MySQL сервер недоступен!".mysql_error());
mysql_select_db($db) or die(mail("admin@yandex.ru","Сообщение");
?>

так тоже не выходит.
Zzepish
leshiy
так и не должно! Функция die прерывает дальнейшее выполнение скрипта
leshiy
Цитата (Zzepish @ 25.08.2015 - 13:35)
leshiy
так и не должно! Функция die прерывает дальнейшее выполнение скрипта

А как тогда подскажи!!!
Zzepish
leshiy
можно через try-catch, например
Zzepish
Zzepish
а можно вообще все запилить в 1-ну функцию
icedfox
leshiy, как то так
try {
mysql_connect($host, $user, $password) or throw new excep_mysql (mysql_error());
} catch (\excep_mysql $e) {
// тут формируешь отправку ошибки на почту
die("MySQL сервер недоступен!");
}
// где excep_mysql это класс наследуюмый от exception с нужными тебе настройками
inpost
А чем мой совет не подходит? Там же проверка стоит:
if(нет соединения) {
тут отправка, если ошибка
}

Или ТС не знает сайта мануала? Тогда спроси, я подскажу ;)

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
icedfox
Цитата (inpost @ 25.08.2015 - 20:09)
А чем мой совет не подходит? Там же проверка стоит:

В твоем об ошибке будет не так много известно wink.gif В моем варианте добавиться трассировка.

Да и как то мне больше нравиться с исключениями работать, более удобно.
Zzepish
inpost
то не интересно biggrin.gif не хардкорно))
inpost
У человека соединение, и соединение лишь в 1 месте. В index.php . (или bd.php).
При этом оно всегда ТАМ. Искать его нет смысла. А вот если бы оно было в функции, то тот же debug_backtrace так же показал бы стек вызовов.

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

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
icedfox
inpost, но по моему ТС говорил про зависание базы, а значит случай не единичный, и здесь поможет вариант с большим количеством инфы, нежели простая проверка факта ошибки.

П.С. В PDO по умолчанию реализованы исключения. По вашей логике его написали вопреки логике программиста? wink.gif
inpost
icedfox
Конечно. Не зря MySQLi более приоритетный, чем PDO wink.gif
Не единичный - да, но код находит в одном месте, а зависает временами. "вчера", "сегодня", "завтра".

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.