Хорошая новость заключается в том, что svn очень легко скриптуют, но плохая новость в том, что вам, вероятно, придется нелегко без доступа к оболочке.
Если вы делаете это без доступа к оболочке, будьте осторожны со всем, что может изменить файл в каталоге в svn. Это может привести к конфликтам между рабочей копией и последней версией и заблокировать ваши обновления. Возможно, вы захотите встроить команду возврата в свой сценарий обновления и рекурсивно выполнить возврат перед обновлением.
Другой вариант - экспорт, а не выписка. У вас не будет каталогов .svn, и вам не придется беспокоиться о конфликтах файлов. Возможно, вы захотите экспортировать в чистый каталог, а не перезаписывать, поскольку я думаю, что экспорт svn не затрагивает файлы без версий, включая файлы, удаленные через svn.
Сложность заключается в том, что у идентификатора пользователя веб-сервера, вероятно, нет разрешения на запись в каталоги, которые вы хотите открыть при оформлении заказа. Поэтому ему необходимо запускать команды svn от имени другого пользователя для получения разрешений на запись и владения файлом. Я использовал suid-perl, чтобы изменить эффективный uid / gid, и вызвал эти сценарии perl из файла php. Затем Perl вызывает команду svn с правильным идентификатором. Если вам действительно нужен suid, тогда вам нужно будет иметь возможность изменять права доступа к файлам и устанавливать бит suid. Возможно, ваш FTP может устанавливать разрешения suid, иначе вам понадобится оболочка. Единственный другой вариант, который приходит на ум (что является плохой идеей), - это предоставить веб-серверу доступ на запись ко всему вашему каталогу.
Если репозиторий svn находится на отдельной машине, вы, вероятно, захотите использовать svn + ssh. Это может означать хранение ключевого файла или пароля на веб-сервере. Убедитесь, что права доступа к файлам ключей верны, поскольку ssh отклоняет их, если они доступны для чтения кому-либо, кроме владельца. На всякий случай убедитесь, что логин на сервере Subversion не может делать ничего, кроме доступа к репозиторию svn.
В ваших файлах .htaccess или httpd.conf вы должны заблокировать любой доступ к каталогам .svn из любого места.
Я также храню свою страницу средства обновления PHP в каталоге, защищенном паролем через SSL. У него есть только одно действие, которое он может выполнить, а именно обновление веб-каталога до последней версии из svn. Он не принимает никакого пользовательского ввода. Если бы он позволял пользователю выбирать тег или редакцию, он принимал бы только выбор тегов из списка или целые номера редакций. Они будут тщательно продезинфицированы перед использованием, и никакой пользовательский ввод никогда не будет использоваться в командах или параметрах оболочки.
Главное - быть осторожным с безопасностью, когда у вас есть какой-либо PHP или доступный извне сценарий, выполняющий команду, которая изменяет данные на сервере.
Я думаю, что на машине, где у вас нет доступа к оболочке, у вас будут большие трудности с разрешениями и владением файлами. Если вы сильно не привязаны к этому хостинг-провайдеру, я бы порекомендовал перейти на провайдера, который предлагает инструменты, облегчающие вашу работу. Вы сэкономите достаточно времени, которое, вероятно, окупится.
15.10.2008