在没有维护模式的情况下,在运行的网站上上传核心文件的新版本


Uploading new version of a core file on running website without maintenance mode

假设我有一个使用Kernel模式在PHP上运行的网站。假设我每秒有1000个请求访问Kernel.php文件。我想在不打开维护模式的情况下上传该文件的新版本。这样做安全吗?我可以上传新文件吗?在某个时候,请求将由这个新文件处理?

  • Kernel.php肯定没有错误
  • 该文件由require_once()包含在index.php
  • 在这种情况下,请忘记维护模式

我被告知要补充一些信息,说明我为什么要考虑这种方法。

我们正在努力开发一个系统,提供更新的可能性,网页的任何部分,由我们的引擎驱动。Kernel只是一个例子——在您看来,如果可以在没有维护模式的情况下修改此文件,那么其他不太重要的文件也可能是如此。

有时更新非常简单,打开维护模式就像是因为一名士兵打喷嚏而阻止了对一个国家的军事入侵。

既然我们谈论的是炸毁东西和进程间通信:我们谁也不会冒险在运行中的网站上上传核心文件而不冻结请求几秒钟,但模板文件呢?这当然是一个修辞问题,但现在我想你已经完全理解了

首先让我说这可能不是一个好主意。

你在Linux服务器上运行吗?如果是这样,重命名文件是一个原子操作,实现这一点的最佳方法是上传具有不同名称的新文件,然后在旧文件上重命名。

如果没有,在旧文件上重命名它可能仍然是比直接上传更好的方法,因为在编写文件时可能会收到一些请求,这会导致错误。

打开web服务器的PHP操作码缓存,并将间隔设置为5分钟或更长时间。

现在,您可以在运行PHP代码之前复制文件,下次间隔到期时,服务器将检查是否有修改并重新编译操作码。您必须等待几分钟才能注意到更改,因为服务器将继续使用缓存的代码,直到它过期。

如果你破坏了PHP文件的依赖关系,或者服务器将更新一个文件,但有其他文件的不同缓存副本,我不能建议会发生什么。

为了最可靠的方法。您需要在web服务器中使用一个功能,该功能允许您将目录热交换为主机。然后将所有PHP代码的一个完整的新副本安装到一个新目录中,然后将主机热交换到这个新位置。不应中断任何请求。