Какова Ваша предпочтительная php стратегия развертывания? [закрытый]

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

  1. Подумайте об обучении PDO (объекты данных PHP) - это база данных уровень доступа, обеспечивающий единый метод доступа к нескольким базам данных.
  2. Подумайте об обучении MySQLi
  3. Используйте собственные функции PHP, такие как: strip_tags , mysql_real_escape_string или если переменная числовая, просто (int)$foo. Подробнее о типах переменных в PHP читайте здесь . Если вы используете библиотеки, такие как PDO или MySQLi, всегда используйте PDO :: quote () и mysqli_real_escape_string () .

Примеры библиотек:

---- PDO

----- Никакие заполнители - не спешили для SQL-инъекций! Это плохо

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values ($name, $addr, $city)");

----- Без имени заполнители

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) values (?, ?, ?);

----- Именованные заполнители

$request = $pdoConnection->("INSERT INTO parents (name, addr, city) value (:name, :addr, :city)");

--- MySQLi

$request = $mysqliConnection->prepare('
       SELECT * FROM trainers
       WHERE name = ?
       AND email = ?
       AND last_login > ?');

    $query->bind_param('first_param', 'second_param', $mail, time() - 3600);
    $query->execute();

PS:

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

. Но хотя PDO и MySQLi довольно быстры, MySQLi выполняет незначительную скорость в тестах - ~ 2,5% для незаготовленных отчетов и ~ 6,5% для подготовленных.

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

160
задан Jeff LaFay 26 June 2011 в 23:23
поделиться

11 ответов

Для PHP SVN с сценарии сборки Phing являются способом пойти. Phing подобен МУРАВЕЙ , но записан в PHP, который делает намного легче для разработчиков PHP изменить для их потребностей.

Наша стандартная программа развертывания следующие:

  • Все разрабатывают на том же локальном сервере на работе, у каждого разработчика есть контроль на его машине, назад размещают также.
  • Фиксации инициировали рычаг постфиксации, который обновляет сервер подготовки.
  • Тесты, работал на подготовке сервера, если они передают - продолжаются.
  • сценарий сборки Phing, работал:
  • Удаляет рабочий сервер, переключая домен на страницу
  • "Under construction" Выполнения обновление SVN на производственном контроле
  • , сценарий
  • дельт схемы Выполнений Запускает тесты
  • , Если тесты перестали работать - выполненный сценарий
  • отката, Если тесты передают, маршруты сервера назад к производственному контролю

существует также phpUnderControl, который является Непрерывным Сервером интеграции. Я не нашел очень полезным для веб-проектов быть честным.

109
ответ дан Nobu 23 November 2019 в 21:33
поделиться

Phing является, вероятно, Вашим лучшим выбором, если можно выдержать боль файлов настройки XML. Платформа Symfony имеет свой собственный порт граблей (pake), который работает вполне хорошо, но скорее сильно связывается к остальной части Symfony (Хотя Вы могли, вероятно, разделить их).

Другая опция состоит в том, чтобы использовать Capistrano. Очевидно, это не интегрируется также с PHP, как это делает с Ruby, но можно все еще использовать его для большого количества материала.

Наконец, можно всегда писать сценарии оболочки. До сих пор это - то, что я сделал.

1
ответ дан troelskn 23 November 2019 в 21:33
поделиться

У меня есть рабочая копия ответвления выпуска SVN по серверу. Обновление сайта (когда нет изменений схемы) так же легко как выдача команды обновления SVN. Я не должен даже выводить сайт из эксплуатации.

1
ответ дан 23 November 2019 в 21:33
поделиться

Я знаю , Phing был упомянут несколько раз теперь, но у меня была большая удача с phpUnderControl. Для нас мы

  1. копии человека Выезда ответвлений к локальным машинам
  2. Ответвления тестируются и затем объединяются в Соединительную линию
  3. , Передает Соединительной линии, автоматически создаются phpUnderControl, запускает тесты и создает всю документацию, применяет дельты базы данных
  4. , Соединительная линия пробегается качественное тестирование и затем объединилась в наше Стабильное ответвление
  5. Снова, phpUnderControl автоматически создает Стабильный, запускает тесты, и генерирует documenation и обновляет базу данных
  6. , Когда мы готовы продвинуть к производству, мы выполняем rsync сценарий, который создает резервную копию Производства, обновляет базу данных, и затем увеличивает файлы. Команда rsync вызывается вручную так, чтобы мы удостоверились, что кто-то следит за продвижением.
3
ответ дан dragonmantank 23 November 2019 в 21:33
поделиться

Я действительно наполняю вручную использующего Мерзавца. Один репозиторий для разработки, которая добирается git push --mirror 'редактор до общественности repo и живой сервер, является третью repo вытянутый от этого. Эта первая часть предполагает, совпадает с Вашей собственной установкой.

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

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

6
ответ дан 23 November 2019 в 21:33
поделиться

Я использую Муравей Apache для развертывания к различным целям (dev, QA и живой). Муравей разработан для работы на развертывание Java, но это предоставляет довольно полезное решение для общего случая для развертывания произвольных файлов.

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

, Например, у меня есть цели для dev, QA и живой, каждый из которых зависит от цели cvsbuild, которая проверяет последний главный пересмотр с нашего сервера CVS, копирует соответствующие файлы в каталог сборки (использующий тег fileset), и затем rsyncs каталог сборки к соответствующему серверу. Существует несколько причуд для изучения, и кривая обучения не является полностью плоской, но я делал ее этот путь в течение многих лет без проблемы, таким образом, я рекомендовал бы его для ситуации, хотя мне любопытно, что другие ответы я буду видеть на этом потоке.

7
ответ дан notneilcasey 23 November 2019 в 21:33
поделиться

Я в настоящее время развертываю PHP с помощью Мерзавца . Простое производство нажатия мерзавца - все, что это необходимо для обновления моего рабочего сервера с последней копией от Мерзавца. Это легко и быстро потому что Мерзавец, достаточно умный, чтобы только отправить diffs а не целый проект снова. Это также помогает сохранить избыточную копию репозитория на веб-сервере в случае отказа оборудования на моем конце (хотя я также продвигаю к GitHub для сейфа).

24
ответ дан Community 23 November 2019 в 21:33
поделиться

То, что Вы автоматически и вслепую вносите изменения с репозитория на рабочие серверы, звучит опасным. Что, если Ваш зафиксированный код содержит ошибку регрессии, таким образом, Ваше производственное приложение получает glitchy?

, Но, если Вы хотите Непрерывную систему Интеграции для PHP, я предполагаю , Phing является лучшим выбором для PHP. Я не протестировал его сам, тем не менее, поскольку я действительно наполняю ручной способ, например, scp.

2
ответ дан Henrik Paul 23 November 2019 в 21:33
поделиться

Мы используем Webistrano, сеть frontend для Capistrano, и очень довольны им.

Webistrano позволяет многоступенчатый, развертывание мультисреды от SVN, МЕРЗАВЦА и других. Это имеет встроенную поддержку отката, поддержку отдельных ролей сервера, таких как сеть, дб, приложение, и т.д., и развертывается параллельно. Это позволяет Вам переопределять параметры конфигурации на нескольких уровнях, такой согласно этапу, и регистрирует результаты каждого развертывающееся, дополнительно отправляя его по почте.

Даже при том, что Capistrano и Webistrano являются приложениями Ruby, синтаксис развертывания 'рецепты' легок и достаточно мощен для понимания для любого PHP программиста. Первоначально Capistrano был создан для проектов Ruby on Rails, но легко размещает проекты PHP.

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

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

14
ответ дан jeffbyrnes 23 November 2019 в 21:33
поделиться

Думаю, способ развертывания SVN не очень хороший. Потому что:

Вам нужно открыть доступ к SVN для всего мира

есть много .svn на производственных веб-серверах

Я думаю, что Phing создает ветку + объединяет все js / css + заменяет конфигурацию этапа + Загрузка по ssh на все серверы www - лучший способ.

ssh к серверу 10 www и svn up тоже проблема.

0
ответ дан 23 November 2019 в 21:33
поделиться

http://controltier.org/wiki/Main_Page

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

1
ответ дан 23 November 2019 в 21:33
поделиться
Другие вопросы по тегам:

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