Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Как в PHP приостановить выдачу контента на время?
Новая тема
Ответить
цитата
07/05/08 в 18:54
Proo
Вот напр если апдейчу базу, не хотелось бы чтобы запросы были.. все сайты соответсвенно что на этой базе хочу заблокировать..
в начале файла думаю добавить что то вроде
if ($db_update) {
выдай сообщение и прекрати поток.
}
Т.е. не хочется else добавлять, чтоб весь html код был в скобках, т.е.
if ($db_update) {
} else {
...
<html></html>
..
}
Такое возможно? Или еще какой более хитрый подход есть?
цитата
07/05/08 в 18:57
dejavu
а если:
Код:
if ($db_update) {
выдай сообщение и прекрати поток.
exit();
}
цитата
07/05/08 в 19:02
fil
Еще короче
Код:
if($db_update)
die('closed for maintenance and upgrades');
цитата
07/05/08 в 19:12
xyrib
для этого есть ob_start но как то кривоватенько ты придумал, используй шаблоны и не будет в коде куча хтмл.
цитата
07/05/08 в 19:16
Proo
Ну уж как придумал
Вообще спасибо всем.. шаблоны же тоже надо как то подключить, подумаю..
цитата
07/05/08 в 19:37
Corex
Не обязательно убивать все запросы и показывать пустые страницы с ошибкой, можно поиграться с LOCK TABLE в MySQL. И, возможно, апдейт базы не будет мешать выборкам.
цитата
07/05/08 в 20:19
Proo
возможно, я потом проконсультируюсь с суппортом, но как на крайний случай надо иметь наверно..
цитата
07/05/08 в 23:28
Pentarh
С рута в мускуле (в консоли очень желательно)
> FLUSH TABLES WITH READ LOCK;
И все. Отрабатываются последние запросы и все базы глобально локаются.
При этом, терминал не закрывать, из утилиты mysql не выходить. Там же делаем нужные административные телодвижения. В этот момент все приходящие запросы стоят в очереди со статусом "Locked" и ждут пока ты разлочишь базу. Лучше ДО этого подтюнить max_used_connections, чтобы сервер от размера очереди не помер.
Теперь в том же терминале делаем
> UNLOCK TABLES;
Все разлочивается, база работает дальше. В момент лока можно даже снимать физический дамп баз майскула.
А чтобы пых-пых корректно реагировал на эту ситуацию, надо
1. подтюнить таймаут коннекта с мускулем. Он по дефалту 60 секунд в пхп.ини Я бы его заменил на 20. Чтобы апач от ожидающих чайлдов не обосрался.
2.
Код:
$c=@mysql_connect($host,$user,$pass);
if (!is_resource($c)) {
if (mysql_errno()=={Номер ошибки "Too many connections"})
die ("Site is under maintenace, sorry");
else
die ("Could not connect to server");
}
цитата
07/05/08 в 23:40
Pentarh
пс. про всякие тюнинги это я написал если сервер более-менее нагружен. а если не большая нагрузка, а операции с базой простые и короткие, то можно просто тупо лок - работа - анлок.
цитата
08/05/08 в 02:22
xreload
Запросы к базе занаимают миллисекунды, что там так апдейтишь, что нужно это блокировать?
в 99% случаев, не нужно нечего, если ты грамотно продумал апдейт.
Мое имхо, проблема высосана из пальца.
цитата
08/05/08 в 17:27
Proo
Спасибо за подробные объяснения, и за "васосана"..
Я на всякий случай, говорю же, надо смотреть в будущее, вдруг БД будет потом очень большая
цитата
08/05/08 в 23:02
Cibtor
Proo писал:
Т.е. не хочется else добавлять, чтоб весь html код был в скобках, т.е.
if ($db_update) {
} else {
...
<html></html>
..
}
Как вариант:
Код:
if ($db_update) {
} else <<<HTML
...
<html></html>
..
HTML;
цитата
09/05/08 в 01:18
Proo
всех оценил, всем спасибо!
Новая тема
Ответить
Эта страница в полной версии