写入目标文件时Require()错误


require() errors while target file is being written

我使用vi编辑服务器上的活动文件。这是一个核心文件,几乎每个页面都需要在一个中等繁忙的网站。当我在编辑时,一切都运行正常,但是当我保存我的更改时,日志显示用户遭受了"Failed opening required 'common.php'"错误。

我只能假设页面请求是在文件写入时进入的,并且vi在写入过程中对文件保持排他锁,PHP只是立即放弃,而不是排队等待锁被释放。但我找不到任何关于这个问题的讨论。有人知道吗?有办法解决这个问题吗?我猜通过本地编辑,推送到存储库,然后更新到生产站点的更改来做"正确"的方式将会有同样的问题,因为svn似乎需要更长的时间来运行,而vi需要更长的时间来编写。

适当的修复将涉及单独的开发、测试和生产环境,以及统一的部署过程。

但是自动更新文件的一个简单技巧是在目标文件上重命名新版本。工作流程:

cd temporary-working-dir
cp your/web/stuff/common.php common.php
vi common.php  # make your changes
mv common.php your/web/stuff/common.php

只要源文件和目标文件在同一设备/分区上,mv应该是即时的,并且每个请求都应该看到文件的旧版本或新版本,两者之间没有任何奇怪。