我想编写一个在服务器上运行的脚本,每x秒查找一个configuration文件,并根据configuration文件中的数据启动或终止其他脚本。 我现在的问题是:当有人通过ftp上传这个configuration文件时,如果上传没有完成,我的脚本就会得到这个configuration数据的一部分。 我怎样才能确保我永远不会损坏(=尚未完成上传)的configuration文件?
得到一个破损的文件是可能的,特别是如果它们很大。 如果他们真的很小(几行),这不太可能。 如果在上传新文件时读取它,或者中断了上传,您必须考虑会发生什么情况。
处理这种事情的一种方法是将file upload到一个临时名称,然后重命名它以取代真正的名称。 那样真正的一个永远不会是不完整的。
虽然可以从客户端执行此操作,但是如果上传是手动的,则会有点不方便。 (很好,如果他们是自动的)。
不过,不lessFTP服务器都会为你处理这个问题。
例如ProFTPD具有configuration选项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服务器的手册。
看看ProFTPD的mod_digest 。