Я хочу написать сценарий, который запускается на сервере и ищет файл конфигурации каждые x секунд и запускает или уничтожает другие сценарии в зависимости от данных в файле конфигурации. У меня вопрос: когда кто-то загружает этот файл конфигурации через ftp, может ли случиться так, что мой скрипт просто получает часть этих данных конфигурации, если загрузка не завершена. Как я могу гарантировать, что никогда не получу сломанный (= еще не загруженный полностью) файл конфигурации?
Вполне возможно получить битый файл, особенно если он довольно большой. Если они действительно маленькие (несколько строк), это маловероятно. Вы должны подумать о том, что произойдет, если вы прочитаете его, пока загружается новый, или если что-то прерывает загрузку.
Один из способов справиться с подобными проблемами - загрузить файл с временным именем, а затем переименовать его, чтобы заменить реальное. Таким образом, настоящий никогда не бывает неполным.
Хотя вы можете сделать это из клиента, это немного неудобно, если загрузка выполняется вручную. (отлично, если они автоматические).
Однако довольно много 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-сервер вы используете.
Взгляни на mod_digest для ProFTPD.