我注意到在 Stack Overflow 和 Reddit 等网站上,他们能够将整个网站置于“只读”模式,例如在维护期间。
我的问题是,实现这一点需要什么样的架构?它是否发生在数据库级别,即一些“锁定”数据库写入的命令?这是一个广泛的问题,所以为了缩小范围,我对以下实现感兴趣:
- PHP
- MySQL
- 拉拉维尔
我注意到在 Stack Overflow 和 Reddit 等网站上,他们能够将整个网站置于“只读”模式,例如在维护期间。
我的问题是,实现这一点需要什么样的架构?它是否发生在数据库级别,即一些“锁定”数据库写入的命令?这是一个广泛的问题,所以为了缩小范围,我对以下实现感兴趣:
数据库本身是否被锁定,我们无法确定。
但我想说这不太可能,特别是因为无论如何您都必须更改前端行为,以避免大量错误消息。
相反,所有接口(如果存在前端和 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>
是不够的)。