Используйте и настройте Укрепленный-PHP , создают простой сценарий с помощью move_uploaded_file и $ _FILES суперглобальный . Самое простое сценарий, самое безопасное это будет (по крайней мере, столь же безопасно как выполнение сама версия PHP)
Я столкнулся с этой проблемой несколько месяцев назад, когда мы начали существенное переписывание нашего веб-приложения. У нас было две разные версии почти идентичных сайтов. Внутренний код был на 99% идентичен, в то время как JavaScript, CSS и другие интерфейсные элементы сильно отличались. У нас были эти два сайта в разных транках в одном репозитории SVN, и вскоре копирование и вставка общего кода между ними превратилось в кошмар. Исправление и слияние были слишком болезненными, чтобы быть полезными из-за незначительных изменений в файлах.
Наше решение не было связано ни с SVN, ни с построением общей библиотеки. Вместо этого концепция отдельного сайта определяется в единой кодовой базе через несколько файлов конфигурации и иерархию файлов CSS, изображений и языковых ресурсов. Специфичные для сайта функции включаются значениями конфигурации.
Каждый сайт получает уникальное имя (скажем, «foo» и «bar»), которое извлекается из файла Web.config во время выполнения. Имя используется для определения того, какой файл конфигурации загружен и какие файлы на стороне клиента использовать. В SVN этот параметр пуст. Он устанавливается нашими сценариями развертывания при копировании на веб-серверы. На наших локальных машинах для разработки переменная среды определяет сайт, с которым мы хотим работать.
Файловая структура файлов, специфичных для сайта, будет выглядеть так:
|- Config
| |- AppSettings.foo.config <- overrides Web.config AppSettings for "foo" site
| |- AppSettings.bar.config <- overrides Web.config AppSettings for "bar" site
|- Content
| |- CSS
| |- main.css <- default CSS file for all sites
| |- main.foo.css <- CSS overrides for "foo" site
| |- Images
| |- logo.jpg <- default logo
| |- logo.foo.jpg <- logo used if site name is "foo"
| |- logo.bar.jpg <- logo used if site name is "bar"
До сих пор это отлично сработало для нас. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.
Имя используется для определения того, какой файл конфигурации загружен и какие файлы на стороне клиента использовать. В SVN этот параметр пуст. Он устанавливается нашими сценариями развертывания при копировании на веб-серверы. На наших локальных машинах для разработки переменная среды определяет сайт, с которым мы хотим работать.Файловая структура файлов, специфичных для сайта, будет выглядеть следующим образом:
|- Config
| |- AppSettings.foo.config <- overrides Web.config AppSettings for "foo" site
| |- AppSettings.bar.config <- overrides Web.config AppSettings for "bar" site
|- Content
| |- CSS
| |- main.css <- default CSS file for all sites
| |- main.foo.css <- CSS overrides for "foo" site
| |- Images
| |- logo.jpg <- default logo
| |- logo.foo.jpg <- logo used if site name is "foo"
| |- logo.bar.jpg <- logo used if site name is "bar"
До сих пор это отлично работало для нас. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.
Имя используется для определения того, какой файл конфигурации загружен и какие файлы на стороне клиента использовать. В SVN этот параметр пуст. Он устанавливается нашими сценариями развертывания при копировании на веб-серверы. На наших локальных машинах для разработки переменная среды определяет сайт, с которым мы хотим работать.Файловая структура файлов, специфичных для сайта, будет выглядеть следующим образом:
|- Config
| |- AppSettings.foo.config <- overrides Web.config AppSettings for "foo" site
| |- AppSettings.bar.config <- overrides Web.config AppSettings for "bar" site
|- Content
| |- CSS
| |- main.css <- default CSS file for all sites
| |- main.foo.css <- CSS overrides for "foo" site
| |- Images
| |- logo.jpg <- default logo
| |- logo.foo.jpg <- logo used if site name is "foo"
| |- logo.bar.jpg <- logo used if site name is "bar"
До сих пор это отлично работало для нас. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.
уже. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта. уже. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.Я не уверен, что правильно понимаю вашу ситуацию, но вы можете найти подсказки о том, как поддерживать репозиторий SVN в книге Subversion , в главе 4.
Похоже, вам нужно либо установить хорошие процедуры для дерева SVN, либо изменить код так, чтобы насколько это возможно, является общим для всех веб-сайтов, а различия можно настраивать. Например, вы можете создать проект main с независимым от сайта кодом, а затем закодировать изменения как проекты, которые строятся на его основе.
Что касается обновления самих сайтов, это должно быть сделано либо путем синхронизации с соответствующими точками в дереве подрывных версий, либо вы должны выполнить новый выпуск (или обновление).
Как и другие, я немного запутался в вашей проблеме, но думаю, что у меня есть общее понимание проблемы. Что вам нужно сделать в этом случае, так это выделить настройки в отдельные библиотеки для каждого клиента / проекта и оставить исходную кодовую базу нестандартной. Базовый код должен содержать только общие функции, применимые ко всем сайтам (хотя некоторые функции могут быть изменены, чтобы вы могли переключать их доступность в зависимости от необходимости).
Если вы все сделаете правильно, вы сможете экспортировать / опубликовать исходный код для любого сайта в любое время и не лажать. Любые настройки должны оставаться без изменений.
Если я правильно понимаю проблему, у вас есть код для четырех в целом похожих веб-сайтов в одном репозитории. Экземпляр веб-сайта имеет настраиваемые функции. Изюминка исходного сообщения, вопрос, выражает озабоченность по поводу того, что «застрял в большом количестве копирования и вставки». В разные моменты вы выражаете разочарование по поводу «слияния» и «ручного слияния».
Я так понимаю, вы используете svn для распространения нового кода на четыре хоста.
Возможно, ваша кодовая база приближается к точке, когда общий материал может быть выгодно считаться библиотекой. С этой точки зрения каждый из четырех веб-сайтов считается приложением, созданным на основе библиотеки. Если это так, то может иметь смысл предоставить каждому из четырех приложений собственное репозиторий в Subversion. Усилия при разработке будут заключаться в том, чтобы отделить общие функции от пользовательских функций, возможно, сделав API в «библиотечном» коде более четко определенным. Затем каждый хост проверяет код библиотеки и свое собственное приложение.
Это близко к тому, что вы думаете?
Вы говорите, что у вас есть одно репо SVN с базой кода для всех сайтов. Так что, если я не ошибаюсь, не можете ли вы просто переместить какие-либо общие компоненты в этот репозиторий?
Такие вещи, как встроенный Javascript, о котором вы говорите, должны быть по возможности внешними. Если макеты HTML совершенно разные, скорее всего, Javascript может значительно отличаться.
Таким образом, эта страница на сайте 1 и на сайте 2 одинакова, но на сайте 3 она делает что-то дополнительное, чего не требует и не нуждается ни один другой сайт. Мы не хотим, чтобы эта специальная функция была перегрузкой, поскольку она нам не нужна / не нужна для других веб-сайтов
Разве вы не можете расширить код загрузки на сайте 3, чтобы у вас была общая база для всех сайтов, но расширить ее на участок 3.
Создать сервер непрерывной интеграции . Практикуйте активную генерацию кода.
Три мысли в порядке возрастания полезности и усилий:
1) Уточнение «разметки для каждого сайта полностью различается (кроме админки, которая представляет собой просто изменение темы. ), но кодовая база та же. "
Сколько «кода» вы можете перенести в проект DLL, который будет совместно использоваться? Если это почти все, то вы можете поддерживать отдельные проекты для каждого набора разметки, и они будут использовать библиотеки DLL в качестве ссылки.
Очевидно, что если у вас много кода, которого нет в AppCode, это вообще невозможно. Если нет, это может быть быстрым путем к меньшему безумию.
2) Можно ли будет поддерживать репозиторий для общего кода с отдельными репозиториями для каждого из сайтов? Затем вы'
Я собираюсь начать с благодарности всех за их вклад.
Я решил (более или менее) проблему.
Я переместил все изображения в папки Темы, а также созданные подпапки в папках шаблонов и элементов управления, в которых будут находиться индивидуальные элементы управления. Я уже создал некоторые функции в схеме базы данных, которые помогли мне с этим.
В моем предварительном планировании системы было много вещей, которые я не реализовал полностью и о которых забыл.
Я также разделил из кода также для подобных веб-сервисов, ну, по крайней мере, для веб-сервисов, которые в любом случае могут выжить сами по себе.
Коллективно мы пришли к решению, поэтому я не уверен, кому присудить баллы?