Как создать режим сайта "только для чтения"?

Я заметил, что на таких сайтах, как Stack Overflow и Reddit, они могут перевести весь сайт в режим "только для чтения", например, во время обслуживания.

У меня вопрос, какая архитектура нужна, чтобы это произошло? Происходит ли это на уровне базы данных, то есть какая-то команда блокирует запись в базу данных? Это довольно широкий вопрос, поэтому, чтобы сузить его, я заинтересован в реализации:

  • PHP
  • MySQL
  • Laravel

1 ответ

Заблокирована ли сама база данных или нет, мы не можем определить.
Но я бы сказал, что это маловероятно, тем более что вам все равно придется изменить поведение внешнего интерфейса, чтобы избежать множества сообщений об ошибках.

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

У меня нет инсайдерской информации о Stackru, но я не могу придумать, как это могло бы работать должным образом.

Что касается вашей "реализации":

На уровне MySQL вы не должны ничего делать, тем более что вам, вероятно, нужно изменить некоторые вещи в базе данных во время обслуживания.

В PHP вы можете сделать что-то подобное для API или всех целевых страниц GET/POST:

if(!$config['readonly'])
{
    $db->query('UPDATE `someTable` SET `whatever` = "whocares"');
}

и то же самое для переднего конца:

$template->renderViewButton();
if(!$config['readonly'])
{
    $template->renderUpdateButton();
    $template->renderLikeButton();
}

Просто скрывайте все элементы, которые изменяют вещи в базе данных, и не забывайте также ограничивать приемные страницы, так как любой, кто имеет некоторый опыт разработки, может создать свой собственный HTTP-запрос и, возможно, может сломать ваш сайт, если вы его не защитите (то же самое) добавление причины readonly в HTML <input> не достаточно).

Другие вопросы по тегам