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

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

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

  • PHP
  • MySQL
  • Laravel

-1

Решение

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

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

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

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

На уровне 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> не достаточно).

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]