phing.tasks.ext.SvnExportRevisionDiffTask

В последнее время в посещаемых мною форумах и конференциях часто всплывает тема деплоя php-приложений на production-сервер. Я решил поделиться собственным рецептом.

В распоряжении имеется:

  1. svn-репозитарий с проектом.
  2. ftp-доступ к рабочему серверу.
  3. установленный и готовый к тяжёлой рутине phing

Сценарий работ следующий:

  1. Сделать экспорт кода из svn
  2. Подготовить его к загрузке (например убрать комментарии, “склеить” мелкие в один большой, удалить лишнее и т.п.)
  3. Проверить на наличие ошибок (они могли попасть в репозитарий или образоваться на предыдущем шаге)
  4. Закачать полученное на рабочий сервер.

Всё вроде бы просто, но смущает один момент – экспорт всего и вся. Со времени последнего обновления на сервере в репозитарии обновились 3 файла, а экспортировать нужно всё? Никак нет! Экспортировать будем только то, что изменилось. То есть первый шаг сценария будет выглядеть так:

  1. Получить последнюю версию проекта на сервере – RevFrom
  2. Получить последнюю версию проекта в репозитарии – RevTo
  3. Экспортировать файлы, которые изменились или добавились c RevFrom до RevTo

Версию рабочего проекта, не мудрствуя лукаво, предлагаю хранить в текстовом файле. Например revision.txt. Версию проекта в репозитарии поможет узнать SvnLastRevisionTask. Неясным остался лишь момент – каким образом выяснить какие файлы изменились. Те, кто пользовались TortoiseSVN наверняка знают о чудесной его возможности – сравнить две ревизии и экспортировать “разницу”. Но svn в чистом виде такой возможности не предоставляет. Так что пришлось немного поработать.
(more…)

25.02.08  |  , ,  | 4 comments

Sendmail & shared hosting II

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

Ну и краткое руководство:

  1. Поместите скрипт куда-нибудь (пусть это будет /usr/bin/sendmail например, а реальный бинарник переименуйте в /usr/bin/sendmail.real)
  2. Отредактируете пути в скрипте (если вы выбрали их другими)
  3. Укажите путь к скрипту в директиве sendmail_path вашего php.ini (если отличается от указанных мною)
  4. Ждите вестей…

P.S.
Вы без труда сможете добавить простейшие “фильтры” и не отправлять например письма содержащие некие сигнатуры…

чтоб тебе пусто было!

Коллега(привет Денис) столкнулся с багом в php-mssql, который может съесть ваш мозг.

Предупреждаю – пустые строки вовсе не пустые! Говорят это ошибка в либе, хотя и воспроизводиться и в win и в *nix (т.е. либы разные). Написал разработчику – а вдруг поможет.

А пока имейте ввиду – если в resultset могут быть пустые строки – надо их сделать таковыми самостоятельно (примерно так: $row["field"] = ($row["field"] != " ") ? $row["field"] : "";) – разумеется, если у вас за каким-то лесом в базе храняться одиночные пробелы, вам очень не повезло ;o)

19.01.08  |   | 2 comments

xdebug.ini

Нашёлся добрых дел мастер, собравший полную информацию о доступных директивах, которые добавляет xdebug в php.ini.

Technorati Tags: ,

27.11.07  |   | стань первым

phing.tasks.ext.FtpUploadTask

Вычищая комментарии от спама (достали, честное октябрятское) наткнулся на незаслуженно позабытый вопрос товарища altern-a про обещанный ftpupload-таск. Вы спросили – мы ответили: нет, мне не сложно – делюсь.

Собственно сам класс FtpUploadTask.php. И небольшие пояснения.

Код по означенной ссылке необходимо сохранить в файл %PHING_HOME%/classes/phing/tasks/ext/FtpUploadTask.php (Разумеется вы уже знаете что такое Phing и он у вас установлен и готов к использованию).
Для работы требуется установленный в include_path PEAR::Net_FTP, которому в свою очередь необходим php-extension FTP.

На заметку виндузятникам
Первое можно установить посредством выполнения магического пасса в командной строке:
>pear install –all-deps net_ftp
Второе в виндовом php уже вкомпилено.

Параметры, которые принимает task (на всякий случай на моём террибл инглиш ):

Name Type Description Default Required
host String Hostname. n/a Yes
port Integer Ftp server’s port. 21 No
username String Ftp user n/a Yes
password String Ftp password n/a Yes
targetDir String Path to destination directory . (FTP-user’s home) No
mode String Upload FTP-mode. Binary No
cleanDir Boolean Cleanup target directory before upload? False No
overwriteExisten Boolean Overwrite existen files? True No
passiveMode Boolean use passive or active ftp-data connection True No

И пример использования : привожу часть build.xml необходимую и достаточную для запуска таска.

<!-- //skip -->
<taskdef classname="phing.tasks.ext.FtpUploadTask" name="ftpupload" />
<!-- //skip -->
<target name="deploy">
   <ftpupload host="example.com" username="joe" password="$ecr3t" targetDir="/remote/project_home/">
      <fileset dir="/path/to/local/project">
         <include name="**" />
         <exclude name="**/*.dist" />
         <exclude name="src/*" />
      </fileset>
   </ftpupload>
</target>
<!-- //skip -->

Разумеется taskdef удобнее перенести в defaults.properties, для того чтобы не таскать его из проекта в проект.

И снова повторюсь – “таким образом программист может за три часа написать программу, которая сделает за пять минут то, что другой человек делал бы целый час…” ;o)

Technorati Tags: , ,

15.11.07  |  ,  | 4 comments

JS-Trojan-HTML-IFRAME-etc

Наверное многим веб-мастерам в последнее время пришлось познакомиться с разного рода вирусами, которые каким-то макаром оказались на главных страницах подопечных сайтов. Вот тут даже один товарищ раздаёт бесплатные советы, которые впрочем не помогут защитить ваш сайт от этой напасти. Всё потому что основной путь внедрения вируса на страницу – FTP (посредством кражи паролей на ftp-аккаунты и последующим их использованием). И насколько я понимаю механизм – некий робот добавляет js-код во все найденные индексные страницы.

Выглядит это обычно как document.write некой ереси (iframe-а) в конце документа.

Сегодня обнаружили такую вот гадость на сайте одного из клиентов. Убрали. Придумал способ борьбы с заразой с помощью php ;o)

Поскольку оригинальностью эти роботы не отличаются, то код просто append-иться к index.php,default.php и т.д. , я недолго думая просто добавил exit(); в конце индексного файла.

P.S.
Как бороться с утечкой паролей каждый пусть решает самостоятельно.
P.P.S.
Следующим витком эволюции этих вирусов вероятно станет синтаксический анализ скриптов, в которые надо будет внедряться ;o)

19.10.07  |   | 6 comments

SQL Server 2005 Driver for PHP

В тайге вымерли все медведи. А виноваты в этом эти ребятки.

Extension пока недокументирован. Список функций мало чем отличается от имеющегося.

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

А в существующем есть две беды, которые мне мешают:

  1. Ограничение на длину varchar – 255. Это “лечиться” только конвертированием в text.
  2. “Неработа” в persistent-mode, которая заключается в том, что сервер (веб в первую очередь, sql потом) зависает после некоторого времени работы с mssql_pconnect (Богдан привет ;o) ).

Корни второй проблемы я кажется нашёл – bug#42584, но толи проблема беcпокоит только меня, толи не столь сильно беспокоит других. Маленькая просьба к почитателям этого поста – проголосуйте за важность этого бага (если он вам не безразличен разумеется).

16.10.07  |   | 2 comments

Performance Optimization WordPress Plugins by W3 EDGE