Я думаю, что если кто-то захочет использовать PHP и MySQL или какой-нибудь другой сервер базы данных:
(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% для подготовленных.
И, пожалуйста, проверьте каждый запрос в своей базе данных - это лучший способ предотвратить инъекцию.
Для PHP SVN с сценарии сборки Phing являются способом пойти. Phing подобен МУРАВЕЙ , но записан в PHP, который делает намного легче для разработчиков PHP изменить для их потребностей.
Наша стандартная программа развертывания следующие:
существует также phpUnderControl, который является Непрерывным Сервером интеграции. Я не нашел очень полезным для веб-проектов быть честным.
Phing является, вероятно, Вашим лучшим выбором, если можно выдержать боль файлов настройки XML. Платформа Symfony имеет свой собственный порт граблей (pake), который работает вполне хорошо, но скорее сильно связывается к остальной части Symfony (Хотя Вы могли, вероятно, разделить их).
Другая опция состоит в том, чтобы использовать Capistrano. Очевидно, это не интегрируется также с PHP, как это делает с Ruby, но можно все еще использовать его для большого количества материала.
Наконец, можно всегда писать сценарии оболочки. До сих пор это - то, что я сделал.
У меня есть рабочая копия ответвления выпуска SVN по серверу. Обновление сайта (когда нет изменений схемы) так же легко как выдача команды обновления SVN. Я не должен даже выводить сайт из эксплуатации.
Я знаю , Phing был упомянут несколько раз теперь, но у меня была большая удача с phpUnderControl. Для нас мы
Я действительно наполняю вручную использующего Мерзавца. Один репозиторий для разработки, которая добирается git push --mirror
'редактор до общественности repo и живой сервер, является третью repo вытянутый от этого. Эта первая часть предполагает, совпадает с Вашей собственной установкой.
большая разница - то, что я использую ответвления почти для каждого изменения, я продолжаю работать (у меня есть приблизительно 5 прямо сейчас), и будьте склонны зеркально отражать назад и вперед между ними. Основное ответвление не становится измененным непосредственно за исключением слияния других ответвлений.
я выполняю живой сервер непосредственно от основного ответвления, и когда я закончен с другим ответвлением и готовый объединить его, зеркально отразите сервер к тому ответвлению некоторое время. Если это повреждается, откладывание его ведущему устройству занимает секунды. Если это работает, это объединяется в ведущее устройство, и живой код обновляется. Я предполагаю, что аналогия этого в SVN имела бы две рабочих копии и указывающий на живую через символьную ссылку.
Я использую Муравей Apache для развертывания к различным целям (dev, QA и живой). Муравей разработан для работы на развертывание Java, но это предоставляет довольно полезное решение для общего случая для развертывания произвольных файлов.
синтаксис файла build.xml довольно легко изучить - Вы определяете различные цели и их зависимости, которые работают, когда Вы называете программу муравья на командной строке.
, Например, у меня есть цели для dev, QA и живой, каждый из которых зависит от цели cvsbuild, которая проверяет последний главный пересмотр с нашего сервера CVS, копирует соответствующие файлы в каталог сборки (использующий тег fileset), и затем rsyncs каталог сборки к соответствующему серверу. Существует несколько причуд для изучения, и кривая обучения не является полностью плоской, но я делал ее этот путь в течение многих лет без проблемы, таким образом, я рекомендовал бы его для ситуации, хотя мне любопытно, что другие ответы я буду видеть на этом потоке.
Я в настоящее время развертываю PHP с помощью Мерзавца . Простое производство нажатия мерзавца - все, что это необходимо для обновления моего рабочего сервера с последней копией от Мерзавца. Это легко и быстро потому что Мерзавец, достаточно умный, чтобы только отправить diffs а не целый проект снова. Это также помогает сохранить избыточную копию репозитория на веб-сервере в случае отказа оборудования на моем конце (хотя я также продвигаю к GitHub для сейфа).
То, что Вы автоматически и вслепую вносите изменения с репозитория на рабочие серверы, звучит опасным. Что, если Ваш зафиксированный код содержит ошибку регрессии, таким образом, Ваше производственное приложение получает glitchy?
, Но, если Вы хотите Непрерывную систему Интеграции для PHP, я предполагаю , Phing является лучшим выбором для PHP. Я не протестировал его сам, тем не менее, поскольку я действительно наполняю ручной способ, например, scp.
Мы используем Webistrano, сеть frontend для Capistrano, и очень довольны им.
Webistrano позволяет многоступенчатый, развертывание мультисреды от SVN, МЕРЗАВЦА и других. Это имеет встроенную поддержку отката, поддержку отдельных ролей сервера, таких как сеть, дб, приложение, и т.д., и развертывается параллельно. Это позволяет Вам переопределять параметры конфигурации на нескольких уровнях, такой согласно этапу, и регистрирует результаты каждого развертывающееся, дополнительно отправляя его по почте.
Даже при том, что Capistrano и Webistrano являются приложениями Ruby, синтаксис развертывания 'рецепты' легок и достаточно мощен для понимания для любого PHP программиста. Первоначально Capistrano был создан для проектов Ruby on Rails, но легко размещает проекты PHP.
После того, как настроенный даже достаточно легко использоваться непрограммистами, такими как тестеры, развертывающие версию подготовки.
Для обеспечения самого быстрого развертываются возможный, мы установили fast_remote_cache метод, который обновляет svn кэш рабочей копии на удаленном сервере, и затем hardlinks результат.
Думаю, способ развертывания SVN не очень хороший. Потому что:
Вам нужно открыть доступ к SVN для всего мира
есть много .svn на производственных веб-серверах
Я думаю, что Phing создает ветку + объединяет все js / css + заменяет конфигурацию этапа + Загрузка по ssh на все серверы www - лучший способ.
ssh к серверу 10 www и svn up тоже проблема.
http://controltier.org/wiki/Main_Page
мы собираемся использовать его для развертывания и обслуживания нескольких серверов.