Хорошая новость заключается в том, что svn очень прост в написании сценариев, но плохая новость в том, что вам, вероятно, будет трудно без доступа к оболочке.
Если вы делаете это без доступа к оболочке, будьте осторожны со всем, что может изменить файл в каталоге под svn. Это может привести к конфликтам между рабочей копией и последней версией и заблокировать ваши обновления. Возможно, вы захотите встроить команду revert в ваш скрипт обновления и рекурсивно вернуться к ней до обновления.
Другим вариантом будет экспорт, а не выписка. У вас не будет каталогов .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 или внешне доступный скрипт, и выполните команду, которая изменяет данные на сервере.
Я думаю, что на машине, где вы не получаете доступ к оболочке, у вас будут большие трудности с разрешениями и владением файлами. Если вы не сильно привязаны к этому хостинг-провайдеру, я бы рекомендовал перейти на провайдера, который предлагает инструменты, облегчающие вашу работу. Вы сэкономите достаточно времени, что, вероятно, будет стоить денег.