developer blog

451 degrees Fahrenheit

Archives Posts

Html DOM parser на PHP

August 11th, 2008 by pilot

Очень полезный класс для разборки DOM модели веб документа с селектора в  jQuery стиле.

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

Почему собственно PHP Simple HTML DOM Parser:

  • Написан на PHP5+ и позволяет легко управлять HTML
  • Поддерживает не валидный HTML
  • Поиск тагов в HTML с селекторами в jQuery стиле
  • Может разложить все содержимое HTML в строку

Скачать последнюю версию с Sourceforge.

Онлайн документация.

Небольшой пример, как извлеть HTML элемент:


// Create DOM from URL or file$html = file_get_html('http://www.google.com/');


// Find all images
foreach($html->find('img') as $element)
  echo $element->src . '<br>'; 

// Find all links
foreach($html->find('a') as $element)
  echo $element->href . '<br>';
Filed under php having 5 Comments »

Archives Posts

Вот он долгожданный релиз symfony 1.1

June 30th, 2008 by pilot

release1.1 Последнее время разработчики усиленно трудились на новой версией symfony и сегодня этот день настал, можно поздравить разработчиков с выходом нового релиза symfony framework!

 

Итак список нового функционала в symfony 1.1:

  • Новая архитектура symfony более настраиваяемая и разделенная, позволяет легко использовать или заменять части фреймворка,
  • Новая объекто-ориентированный form framework, позволяет налету создавать формы и повторо их использовать,
  • Совершенно новая система задач (task system) позволяет быстро создавать рассширяемые батч скрипты и утилиты командной строки,
  • Теперь Symfony имеет приличный YAML parser, с подробными сообщениями об ошибках,
  • Новый менеджер плагинов совместим со стандартом PEAR API, отображает зависимости плагинов, и предлагает набор опций для лучшего управления тем что вы установили,
  • Система обработки форматов позволяет вашему приложению вести себя по разному в зависимости от запроса с iPhone, от поисквого бота, или от браузера,
  • Propel 1.2 ORM теперь представлен в виде плагина, что позволяет вам очень просто перейти на Doctrine или Propel 1.3,
  • Плагин sfCompat10Plugin обеспечит работу вашего проекта основанного на версии 1.0 после обновления до версии 1.1!
  • Система роутинга теперь кешируется, что приведет к значительному увеличению производительности если в вашем приложении разветвеленный роутинг. Так же, класс роутинга (routing class) больше не синглтон (singleton), так что теперь можно легко расширять его под свои нужды,
  • Последнее, не совсем фича, более чем 8,500 юнит и функционал тестов гарантируют общую ставильность кода фреймворка. Количество тестов удвоилось в 1.1 по сравнению с 1.0!

Инсталяция и обновление symfony

Для инсталяции symfony 1.1 через PEAR, теперь нужно явно указывать какую версию вы хотите установить. И так, если вы хотите установить стабильную 1.1.0 версию, выполняем:

$ pear install symfony/symfony-1.1.0

В случае если вы хотите стабильную 1.0 версию:

$ pear install symfony/symfony-1.0.17

Если вы предпочитаете скачивать самостоятельные архивы, качайте архив symfony-1.1.0.tgz или symfony-1.1.0.zip и распакуйте в любую папку на вашем диске.

Если вы новичек в symfony, для вас доступна урощенная версия “песочница” (sandbox) :

Ну и если ты совсем крут и у тебя есть доступ к SVN, просто выполни чекаут ветки 1.1:

$ svn co http://svn.symfony-project.com/branches/1.1/ /path/to/symfony

Все остальное хорошо и в деталях расписано в инструкции по установке symfony.

Обновление существующего проекта

Если вы планируете обновить существующий на symfony 1.0 проект для использования новой версии 1.1, внимательно прочтите UPGRADE файл, который есть в каждом дистрибутиве symfony. Если же вы сейчас используете symfony RC2, убедитесь что вы выполняли команду symfony project:upgrade,перед тем как обновите библиотеки symfony.

Относительно документации

Вся документациия обновлена и отображает изменения между symfony 1.0 и новой версией. Комьюнити оправдало наши ожидания и способствовало переводу документации на 10 новых языков менее чем за 15 дней!

В cookbook добавили несколько полезных примеров и опубликовали первые 4 главы книги о новом фреймворке для работы с формами. API документация так же поможет вам легко найти все что вам нужно по всему коду symfony.

Поддержка

Symfony 1.1, как переходной релиз, будет поддерживаться в течении одного года начиная с 30.06.2008, тогда как 1.0 все еще будет поодерживаться до Января 2010.

Следующий релиз

Фабьен и основная команда уже начали работу над новым функционалом версии 1.2, которая будет выходить по датам, а не по новому функионалу. Таже, цикл релизов будет радикально уменьшен (похоже, что разаботчкик будут использовать agile - scrum методологию). Можно ожидать инетесных фич и улучшений в новом релизе, начиная с совершенно нового генератора админ интерфейса основанного на новой системе работы с формами представленной в symfony 1.1.

Filed under Symfony, php having 1 Comment »

Archives Posts

Архитектура symfony 1.1

June 24th, 2008 by pilot

 

Перед окончательным релизом symfony 1.1 (который должен произойти уже на этой неделе), Разработчики расказали о новой архитектуре symfony 1.1. Кроме уже существующих новых возможностей, новая версия - это год сложной работы по внутренней перестройке фреймворка. Итак давайте покапаемся во внутренностях!

Платформа symfony (the symfony platform)

symfony 1.1 основана на множестве сплоченных, но отдельных классах - symfony platform:

The symfony platform

Каждый класс в symfony platform можно использовать без общей MVC (Модель Вид Контроллер) архитектуры. Классы в symfony platform не имеют зависимостей, только одно условие требуется для их использования - это предварительная регистрация в symfony autoloader:

require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register(); 

Написав всего пару строк, вы можете использовать любой класс из symfony platform. К примеру если один из ваших проектов не использует symfony, вы все равно можете использовать класс sfYaml просто подключив symfony autoloader:

require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register();// load some YAML file or string
$config = sfYaml::load('/path/to/a/file.yml');
$config = sfYaml::load(<<<EOF
config:
  key: value
  foo: [bar, foobar]
  bar: { bar: foo }
EOF);// dump some array to YAML
$yaml = sfYaml::dump($config);  

То же самое касается всех классов, к примеру класс sfCache:

require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register();$cache = new sfSQLiteCache(array('database' => dirname(__FILE__).'/cache.db'));
$cache->set('foo', 'bar');
$value = $cache->get('foo');  

В примерах используется SQLite backend, но symfony таже предоставляется backends основанные на File, APC, XCache, EACcelerator, и Memcache.

Даже если использование независимых классов кажется естественным, symfony platform пошла на шаг дальше с такими классами как sfRequest или sfResponse. Посмотрим пример где используются эти два класса для создания простого скрипта ‘Hello World’:

require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register();

$dispatcher = new sfEventDispatcher();$request = new sfWebRequest($dispatcher);
$response = new sfWebResponse($dispatcher);$content = 'Hello '.$request->getParameter('name', 'World');$response->setContent($content);
$response->send();  

В этом примере мы используем объект sfEventDispatcher. Даже если классы в платформе полностью разделены, некоторые классы могут общаться друг с другом благодаря диспечеру (dispatcher). Диспечер (dispatcher) преставляет средства для уведомления и прослушивания событий. Вам не нужно создавать интерфейс для прослушивания, и использовать какой-либо специальный класс для создания события; событие определяется только по его имении и массивом параметров отправленых уведомителем (notifier).

К примеру, класс sfPatternRouting прослушивает события request.filter_parameters:

$callback = array($this, 'filterParameters');
$dispatcher->connect('request.filter_parameters', $callback);  

И когда зпрос создан, sfWebRequest уведомляет событие request.filter_parameters:

$event = new sfEvent($this, 'request.filter_parameters');
$parameters = $dispatcher->filter($event, $parameters);  

Итак, даже если классы sfWebRequest и sfPatternRouting разделены, они автомотичеки общаются друг с другом, когда они разделяют общий диспечер (dispatcher).

Чтоб представить эту возможность, изменим чуток в предыдущем примере, добавим объект роутинга (routing object), который подключается к приложению ‘Hello World’ по шабону /hello/:name:

require_once '/path/to/sfCoreAutoload.class.php';
sfCoreAutoload::register();$dispatcher = new sfEventDispatcher();$routing = new sfPatternRouting($dispatcher);
$routing->connect('hello', '/hello/name');$request = new sfWebRequest($dispatcher);
$response = new sfWebResponse($dispatcher);$content = 'Hello '.$request->getParameter('name', 'World');$response->setContent($content);
$response->send();  

Теперь, если вы сохраните этот скрипт как index.php в root папке вашего веб сервера, вы можете увидеть работу приложения набрав в браузе, к примеру /index.php/hello/451fahrenheit.

Это хорошо если вы хотите использовать некоторые интересные функции, которые предлагает symfony, без использования всей MVC архитектуры.

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

Вы так же можете создать свой собственных фреймворк основаный на symfony platform. Вам не нужно выдумывать колесо, symfony platform все что вам нужно для создания классного фреймворка:

  • sfRequest/sfRouting: Запросы
  • sfUser/sfStorage: Пользователь/Сессии
  • sfForm: Фреймворк для создания форм 
  • sfCache: Работа с кешем 
  • sfOutputEscaper: Защита от  XSS атак

  • sfResponse: Ответы

Конечно, symfony framework сам основан на symfony platform:

The symfony MVC framework

Класс sfConfiguration предлагает способ для конфигурирования и настройки вашего приложения. Класс sfContext  действует как регистр который хранит ссылки на все объекты ядра. И благодаря конфигурационному файлу factories.yml, вы очень легко можете настраивать все зарегистрированные классы, всего лишь  отредактировав YAML файл.

Symfony MVC framework предлагает ряд дополнительных классов на вершине symfony framework, как показно ниже:

The symfony MVC framework

Слой Модели (Model layer)  предствален сторонними библиотеками, Propel или Doctrine. Даже если symfony 1.1 связана с плагином Propel, нет ничего проще перейти на Doctrine, установив sfDoctrinePlugin. Обе ORMs предлагают одинаковый уровень интеграции с symfony.

Слой Вид (View layer) представлен классом sfView , набором хелперов (helpers), и шаболнами (templates) разработчика.

Слой Контроллер (Controller layer) основан на цепочке фильтров (filter chine) и действий (actions) определенных разработчиком.

Начиная с версии 1.1, symfony одним из наиболее разделенных фреймворков существующих на PHP, даже болше чем Zend Framework. К примеру,  sfForm фреймворк используется без любых классов MVC в отличии от Zend_Form который несколько привязан к слоям контроллер и вид (controller and view layers).

Filed under Symfony, php having 1 Comment »

Archives Posts

Aptana Cloud - платформа для организации Cloud Computing

June 13th, 2008 by pilot

Aptana Cloud - это Elastic Application Cloud, прозрачно масштабируемая сетевая инфраструктура для развертывания веб-приложений. Совместно с серверной поддержкой, будет добавлен соответствующий инструментарий и в среду разработки Aptana IDE, с которой напрямую можно будет развертывать приложения, управлять доступными настройками, отлаживать и контролировать свой проект. Среда, по заявлению, идеально подойдет для разработчиков современных Web 2.0 проектов, принимая на себя заботу об масштабировании сетевой и серверной инфраструктуры, оставляя разработчикам только разработку и ничего больше.

Подробнее здесь

Filed under php having No Comments »

Archives Posts

Рисуем свой pdf файл на php, часть 2

October 28th, 2007 by pilot

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

Итак бибилиотеке fpdf 1.5.3 , скачиваем, распаковываем к себе на сервер в любую папку, к примеру pdf, после распаковки получаем следующую структуру папок:

У себя я использую пакет denver от dklab.ru, либо XAMPP http://www.apachefriends.org/en/xampp.html, который включает полный пакет программ необходимых веб разработчику. К тому же XAMPP подойдет как тем кто любит Linux, так и Windwos разработчикам.

pdf/
-doc/
-font/
-tutorial/
-FAQ.htm
-fpdf.css
-fpdf.php
-histo.htm
-install.txt

Оставляем только необходимое папку font/ и fpdf.php. Конечно, у кого есть немного времени чтоб ознакомиться с примерами из папки tutorial/, вы не пожалеете, примеры показывают практически исчерпывающую информацию по работе с fpdf.

Для начала создамим первый простой pdf файл, создайте pdf/test.php, с кодом:

[cc lang="php"]
require(’fpdf.php’);

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont(’Arial’,'B’,16);
$pdf->Cell(40,10,’Hello World!’);
$pdf->Output();
[/cc]

Первой строчкой мы подключаем библиотеку, далее:

[cc lang="php"]$pdf = new FPDF(); // Создаем новый объект[/cc]

Изначально наш pdf файл пуст, по-этому добавляем в наш pdf, новый лист:

[cc lang="php"]$pdf->AddPage(); // по умолчанию создется лист формата А4[/cc]

Перед выводом любого текста, предварительно нужно задать шрифт, в противном случае при создание будет сообщено об ошибке:
[cc lang="php"]$pdf->SetFont(’Arial’,'B’,16);[/cc]

И вот теперь мы может напечатать свой первый текст в первом pdf файле, с помощью функции Сell(), эта функция нарисует прямоугольную область с надписью внутри. Фактически будет выведена ячейка таблицы с текстом внутри.

[cc lang="php"]Cell(40,10,’Hello World!’);[/cc]

Для вывода просто текста используюется функция Write(), а для перевода на новую строку отдельная функция Ln():

[cc lang="php"]
$pdf->Ln(); // перевод картеки на новую строку
$pdf->Write(4, “текс для вывода”); // значение 4 означение высоту строки
[/cc]

Выводим сам pdf, с помощью функции Output(), которая может принимать несколько значний, Output(”пусть/имя.pdf”, dest) имя выводимого файла, и второй необязательный параметр как будет выводиться файл, сразу в броузер либо сохранен на диск:

[cc lang="php"]$pdf->Output();[/cc]

Вот и создан первый pdf файл, на практиче простые текстовые файлы создаются довольно просто и библиотека работает безупречно.

И так вывод тикетов в pdf файл, ниже я буду давать php код с минимумом текстовых коментариев, так как основные принципы создания pdf файла я описал выше…

Read the rest of this entry »

Filed under php having 4 Comments »

Archives Posts

Рисуем свой pdf файл на php, часть 1

October 25th, 2007 by pilot

При работе над одним проектом возникла задача вывести тикеты (tickets) на предварительно порезанной самоклеющейся бумаге.

Из трех решений данной задачи:

  1. Выводить простым html ‘ лем (и конвертировать в pdf)
  2. Нарисовать gif картинку
  3. Нарисовать pdf

был выбран вариант №3 - нарисовать pdf, исходя из того, что в первом варианте вывод на печать в разных броузеров значительно отличается и выводить html, который требуется сформировать под вывод на печать основных броузеров, не целесообразно. Второй вариант - вывод в картинку, не подходил так как во время вывода изображения теряется качество выводимого текста.

Выбранный в итоге вариант рисования своего pdf, как оказалось на практике не так легко воплотить.

Первое, что нужно выбрать, библиотеку для рисования pdf.

При беглом обзоре с гуглом, попались:

  1. pdflib
  2. fpdf153
  3. html2fpdf-3.0.2b — конвертер из html
  4. dompdf-0.5.1 — конвертер из html

Выбор был остановлен на fpdf153, почему?

Самый простой вариант, который меня устраивал — это использовать конвертер из html в pdf , но полученный результат конвертирования меня не устроил, так как пердставленые бесплатные конвертеры могут корректно выполнять конвертацию только простых html файлов без использования блоков div. В основном простых таблиц обозначенных бордерами.

Кого заинтересовали мои исследования в области конвертации из html в pdf, пишите в комментариях. Так как во время поиска конвертера я протестировал несколько коммерческих продуктов, которые при наличии средств можно использовать вместо того, чтоб заниматься конвертацией и доделкой бесплатных библиотек самому.

Рисовалка pdf файлов pdflib доступная как модуль расширения php хорошо документированная, оказалась для меня не доступной так как хостиг провайдер заказчика, отказался добавлять эту библиотеку. В итоге для работы я выбрал библиотеку fpdf последняя доступная версия 1.5.3 , сайт разработчика www.fpdf.org Русская документация по fpdf library качаем по ссылке http://www.fpdf.org/en/dl.php?id=92

С библиотекой все ясно, приступаем непосредственно к самому моменту рисования pdf файла, об этом во подробно во второй части…

У кого есть личный примеры работы с fpdf, пишите свои примеры, буду рад разместить ваш опыт на страницах этого дневника.

Не забудьте подписаться на RSS и e-mail рассылку.

Filed under php having No Comments »