На сервере лежит файл в котором указана последняя версия.
+ файл в котором указаны все файлы программы и их md5 мы сравниваем чего не хватает докачиваем.
Убедительно попрошу отвечающих предварительно ознакомится с темой! тут уже раз 5 звучит один и тот же совет, еще раз повторюсь что необходимо обновлять некоторым клиентам дополительные модули и необходимо предусмотреть обновлечение через версию, пока все идеи по реализации описаны в моем посте чуть выше, если Вы с ними не согласны и готовы предложить лучше - буду Вам благодарен, с меня +
Посмотри на любые релизы любой мало-мальски распространенной системы: кроме самой новой версии всегда выпускаются апдейты ко всем ранее существовавшим поднимающие версию до current.
Таким образом осуществить будет проще всего:
клиент обращается к серверу обновлений и говорит свою версию, на что сервер выдает список подходящих для нее обновлений, а дальше - что ставить, а что нет решает юзверь.
Обновления пофайлово не происходят никогда. Обновляется полностью модуль, поэтому всю цмс нужно разделить на N-ное их количество в независимом друг от друга исполнении. Так будет проще при реализации, да и конфликтов сможешь избежать. Придется вести учет версий всех модулей в движке, ага.
Такое проще всего будет реализовать, если ты используешь при разработке SVN или CVS. Тебе нужно будет лишь просмотреть список изменений межу версиями и оформить в виде обновленных файлов.
По поводу крона. Многие, в том числе и булка(vbulletin) используют метод псевдо image-cron'а, когда в тело страницы встраивается картинка, src которой указывает на cron.php, который и выполняет все необходимые действия.
Как пример реализации систем обновлений можешь глянуть bitrix и umicms. Линки не даю - на варезниках полно. Еще можешь глянуть это же в TYPO3 (http://typo3.org), но в их коде черт ногу сломит.
спасибо на счет групп и модулей вместо одиночных файлов здравая мысль, а вот на счет апдейтов с текущей до максимальной пока еще размышляю, может всетаик стоит сделать поэтапно, в конце концов трафика всеравно мизерный