2013-03-18 121 views
-1

有没有一种方法可以安全地替换服务器上的php文件,而它正在被用户执行?我的意思是 - 我是否必须寻找适当的沉默时间来上传具有相同名称的新版本文件?我知道我们的经验是,在繁忙时间更新导致像那些文件中的错误而被截断了,但我不知道究竟是什么的推移有: - 如果PHP文件被解析第一和投入操作码,我会承担这个码应该执行到尽管原来的文件刚刚更改结束。 是不是因为php文件被修改了,这个操作码不再有效,而是试图“重新加载” - 在这种情况下,甚至连APC都不会帮忙? 或者更确切地说,当读取php到操作码中断时出现错误? 或者,也许文件首先被删除,然后被写入的速度比被读取的速度慢,并且该读数达到当前结束? 无论如何 - 是否有任何指令保护PHP文件免受并发修改和阅读?有没有工具?在linux apache服务器上执行php文件时会发生什么情况?

+2

这不是重复的问题,显然是一些重复的猎人没有时间读它不够彻底。包含可执行代码的文件与读取json文件有所不同,它被解析和解释,不仅被读取!他们不但没有回答,而且阻止了我找到... – 2013-03-19 13:40:53

+0

您的问题缺乏格式和清晰度。如果您可以编辑它以改善两者,我会再看一次。就目前而言,我很难遵循你所问的问题。 – 2013-03-19 14:00:57

回答

1

一般情况下,像一个“维护模式”是非常有用的。它可以通过很多不同的方法来实现,例如更改文档根目录或使用临时重定向配置。

在特定情况下,你可以交换文件。当它从Web访问时,解析器将其加载到RAM中并在那里使用它。在复制过程中,它被锁定,所以如果再次访问,PHP会给你一个错误。

移动是大多数系统上的原子操作,所以我会建议以不同的名称上传文件并将其“移动”到正确的位置。

+0

我忘了补充 - 我在通过FTP上传同名时出现错误,但由于上传持续了很长时间,我开始通过以不同名称上传文件并将其重命名到服务器上来执行此操作,但我没有最近发生的任何错误,认为我是如此快速和幸运,并想知道如何处理这件事。我不知道它是正式的原子 - 这意味着当这个文件有一半的名字时,甚至不会有一微秒? :-) – 2013-03-18 14:05:52

+0

@ n-dru在同一文件系统上,它至少非常接近原子操作。所以试试吧。如果仍然有问题,可以合并符号链接 - 用符号链接替换当前版本的PHP文件。如果您上传新版本,请将符号链接更改为新版本。 – zero0 2013-03-18 14:18:46

+0

“非常接近”听起来并不令人信服:-)我试图弄清楚我应该如何替换文件,我仍然不知道“每个人”是如何做到的...... – 2013-03-18 15:50:41

0

这是绝对安全的。
执行PHP代码之前是interpreted
当文件正在执行时,它没有被锁定。
没有什么值得担忧的。

+1

PHP不是读取文件的东西 - Apache就是。 Apache并没有锁定文件(就像你提到的那样),这意味着*技术上*该文件可能被中间读取覆盖,这实际上可能会导致问题(并且我之前也收到了解析器错误) 。 – newfurniturey 2013-03-18 13:47:35

1

不要紧,它锁定或不锁定文件。

在linux下旧的文件句柄将指向旧文件没有文件名(毕竟手柄闭合文件将被删除)。新文件可以以相同的名称存在。

相关问题