Единственная Кодовая база несколько веб-сайтов

Используйте и настройте Укрепленный-PHP , создают простой сценарий с помощью move_uploaded_file и $ _FILES суперглобальный . Самое простое сценарий, самое безопасное это будет (по крайней мере, столь же безопасно как выполнение сама версия PHP)

13
задан Rodia 14 April 2017 в 12:32
поделиться

8 ответов

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

До сих пор это отлично работало для нас. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.

уже. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.

уже. Добавить новую функцию на конкретный сайт так же просто, как добавить эту функцию в нашу кодовую базу и включить ее только для этого сайта.

5
ответ дан 2 December 2019 в 02:05
поделиться

Я не уверен, что правильно понимаю вашу ситуацию, но вы можете найти подсказки о том, как поддерживать репозиторий SVN в книге Subversion , в главе 4.

Похоже, вам нужно либо установить хорошие процедуры для дерева SVN, либо изменить код так, чтобы насколько это возможно, является общим для всех веб-сайтов, а различия можно настраивать. Например, вы можете создать проект main с независимым от сайта кодом, а затем закодировать изменения как проекты, которые строятся на его основе.

Что касается обновления самих сайтов, это должно быть сделано либо путем синхронизации с соответствующими точками в дереве подрывных версий, либо вы должны выполнить новый выпуск (или обновление).

0
ответ дан 2 December 2019 в 02:05
поделиться

Как и другие, я немного запутался в вашей проблеме, но думаю, что у меня есть общее понимание проблемы. Что вам нужно сделать в этом случае, так это выделить настройки в отдельные библиотеки для каждого клиента / проекта и оставить исходную кодовую базу нестандартной. Базовый код должен содержать только общие функции, применимые ко всем сайтам (хотя некоторые функции могут быть изменены, чтобы вы могли переключать их доступность в зависимости от необходимости).

Если вы все сделаете правильно, вы сможете экспортировать / опубликовать исходный код для любого сайта в любое время и не лажать. Любые настройки должны оставаться без изменений.

0
ответ дан 2 December 2019 в 02:05
поделиться

Если я правильно понимаю проблему, у вас есть код для четырех в целом похожих веб-сайтов в одном репозитории. Экземпляр веб-сайта имеет настраиваемые функции. Изюминка исходного сообщения, вопрос, выражает озабоченность по поводу того, что «застрял в большом количестве копирования и вставки». В разные моменты вы выражаете разочарование по поводу «слияния» и «ручного слияния».

Я так понимаю, вы используете svn для распространения нового кода на четыре хоста.

Возможно, ваша кодовая база приближается к точке, когда общий материал может быть выгодно считаться библиотекой. С этой точки зрения каждый из четырех веб-сайтов считается приложением, созданным на основе библиотеки. Если это так, то может иметь смысл предоставить каждому из четырех приложений собственное репозиторий в Subversion. Усилия при разработке будут заключаться в том, чтобы отделить общие функции от пользовательских функций, возможно, сделав API в «библиотечном» коде более четко определенным. Затем каждый хост проверяет код библиотеки и свое собственное приложение.

Это близко к тому, что вы думаете?

0
ответ дан 2 December 2019 в 02:05
поделиться

Вы говорите, что у вас есть одно репо SVN с базой кода для всех сайтов. Так что, если я не ошибаюсь, не можете ли вы просто переместить какие-либо общие компоненты в этот репозиторий?

Такие вещи, как встроенный Javascript, о котором вы говорите, должны быть по возможности внешними. Если макеты HTML совершенно разные, скорее всего, Javascript может значительно отличаться.

Таким образом, эта страница на сайте 1 и на сайте 2 одинакова, но на сайте 3 она делает что-то дополнительное, чего не требует и не нуждается ни один другой сайт. Мы не хотим, чтобы эта специальная функция была перегрузкой, поскольку она нам не нужна / не нужна для других веб-сайтов

Разве вы не можете расширить код загрузки на сайте 3, чтобы у вас была общая база для всех сайтов, но расширить ее на участок 3.

0
ответ дан 2 December 2019 в 02:05
поделиться
0
ответ дан 2 December 2019 в 02:05
поделиться

Три мысли в порядке возрастания полезности и усилий:

1) Уточнение «разметки для каждого сайта полностью различается (кроме админки, которая представляет собой просто изменение темы. ), но кодовая база та же. "

Сколько «кода» вы можете перенести в проект DLL, который будет совместно использоваться? Если это почти все, то вы можете поддерживать отдельные проекты для каждого набора разметки, и они будут использовать библиотеки DLL в качестве ссылки.

Очевидно, что если у вас много кода, которого нет в AppCode, это вообще невозможно. Если нет, это может быть быстрым путем к меньшему безумию.

2) Можно ли будет поддерживать репозиторий для общего кода с отдельными репозиториями для каждого из сайтов? Затем вы'

0
ответ дан 2 December 2019 в 02:05
поделиться

Я собираюсь начать с благодарности всех за их вклад.

Я решил (более или менее) проблему.

Я переместил все изображения в папки Темы, а также созданные подпапки в папках шаблонов и элементов управления, в которых будут находиться индивидуальные элементы управления. Я уже создал некоторые функции в схеме базы данных, которые помогли мне с этим.

В моем предварительном планировании системы было много вещей, которые я не реализовал полностью и о которых забыл.

Я также разделил из кода также для подобных веб-сервисов, ну, по крайней мере, для веб-сервисов, которые в любом случае могут выжить сами по себе.

Коллективно мы пришли к решению, поэтому я не уверен, кому присудить баллы?

0
ответ дан 2 December 2019 в 02:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: