我想编写一个在服务器上运行的脚本,每隔 x 秒查找一次配置文件,并根据配置文件中的数据启动或终止其他脚本。我现在的问题是:当有人通过 ftp 上传此配置文件时,如果上传尚未完成,我的脚本是否只会获取部分配置数据。我如何确保永远不会得到损坏的(=尚未完全上传)配置文件?
答案1
很有可能会得到损坏的文件,尤其是当文件很大时。如果文件真的很小(只有几行),则不太可能。您必须考虑如果在上传新文件时读取该文件,或者如果某些事情中断了上传,会发生什么。
处理此类问题的一种方法是将文件上传到临时名称,然后重命名以替换真实文件。这样,真实文件就永远不会不完整。
虽然您可以从客户端执行此操作,但如果上传是手动的,则会有点不方便。(但如果是自动的,那就太好了)。
不过,相当多的 FTP 服务器会为您处理这个问题。
例如 ProFTPD 有配置选项 HiddenStores:
http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html
NcFTPd 有类似的东西:
http://www.ncftp.com/ncftpd/doc/config/g/upload-tmp-then-rename.html
查看您正在使用的 FTP 服务器的手册。
答案2
看一眼mod_digest适用于 ProFTPD。