-3

我注意到在 Stack Overflow 和 Reddit 等网站上,他们能够将整个网站置于“只读”模式,例如在维护期间。

我的问题是,实现这一点需要什么样的架构?它是否发生在数据库级别,即一些“锁定”数据库写入的命令?这是一个广泛的问题,所以为了缩小范围,我对以下实现感兴趣:

  • PHP
  • MySQL
  • 拉拉维尔
4

1 回答 1

2

数据库本身是否被锁定,我们无法确定。
但我想说这不太可能,特别是因为无论如何您都必须更改前端行为,以避免大量错误消息。

相反,所有接口(如果存在前端和 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>是不够的)。

于 2015-04-22T14:12:22.643 回答