Список полезных PHP классов и библиотек

PHP*

Email


  • Swift Mailer
    Swift Mailer легко интегрируется в любое PHP-приложение. Это гибкий и элегантный ООП-подход к отправке писем с множеством функций: отправка эл.почты, используя SMTP, SendMail, Postfix, поддержка серверов и др.
  • PHPMailer
    Лучший класс для работы с эл. почтой. Поддерживает сообщения в цифровой форме, S/MIME шифрование, текстовые и HTML-письма, изображения, поддерживает несколько Email’ов, SMTP-аутентификация.


Формы


  • Securimage PHP Captcha
    Скрипт для создания сложных изображений (капч) для защиты от спамеров. Легко добавляется в любую форму.
  • phpObjectForms
    ООП библиотека для создания и обработки HTML-форм. Основные возможности: поддержка всех стандартных форм ввода, проверка на стороне сервера с помощью регулярных выражений, проверка на стороне клиента с помощью Javascript, поддерживает шаблоны форм. Стили форм записываются в CSS и вы можете легко настроить их отображение.

Изображения / медиа / файлы



  • PHP Thumb
    Маленькая библиотека для работы с изображениями: изменение размеров, поворот, Crop. Вы также можете добавлять пользовательские функции. Может выполнять подряд несколько действий, без неодходимости сохранять и повторно инициализировать класс со всеми манипуляциями.
  • WideImage
    ООП-библиотека для работы с изображениями. Она обеспечивает простой способ подгрузки и хранения изображений из файлов, баз данных и URL. Поддерживает наиболее распространённые графические форматы: GIF, PNG, JPEG, GD и GD2.
  • Smart Image Resizer
    Позволяет изменять размер и кропать любые изображения на вашем сайте фактически их не касаясь. Просто загрузите изображения в максимальном его размере а затем используйте любые его части. Обладает множеством полезных функций.
  • class.upload.php
    Это небольшой PHP-скрипт для закачки изображений и управления ими на сервере. Он может конвертировать изображения из одного формата в другой, изменять размер, добавлять метки, водяные знаки и “размывать” изображения. Вы можете использовать его для файлов, загруженных с помошью HTML-формы, Flash Uploader или локальных файлов.
  • getID3()
    PHP-скрипт, который извлекает полезную информацию из MP3 и других мультимедийных форматов (OGG, WMA, WMV, ASF, WAV, AVI, AAC, VQF, FLAC, MusePack, Real, QuickTime, Monkey’s аудио, MIDI и т.д.)

Javascript / AJAX


  • PHPLiveX
    Небольшая библиотека, которая позволяет легко интегрировать технологию AJAX в ваш веб-проект. Вы можете отправлять данные формы и отправлять запрос на другую страницу без перезагрузки текущей.
  • Xajax
    Очень известная библиотека и Javascript-движок, который позволяет вам легко создавать мощные Ajax-приложения с использованием HTML, CSS, Javascript, PHP. Страницы получают возможность асинхронно посылать запросы на сервер и обновлять содержимое страницы без её перезагрузки.

RSS/Atom


  • SimplePie
    PHP-класс, который предоставляет простую API для выполнения всей грязной работы по получению, кэшированию, разбору и нормализации структуры RSS и Atom форматов.

Безопасность



  • PHP Intrusion Detection System (PHPIDS)
    Пресекает попытки злоумышленников нарушить работу вашего сайта. В настоящее время PHPIDS обнаруживает всевозможные XSS, SQL-инъекции, RFE / LFI, DoS и LDAP нападений.

Тестирование и отладка



Базы данных


  • ADOdb
    Объектно-ориентированная библиотека. Сделана по побразцу Microsoft ADO, но имеет ряд усовершенствований, которые делают её уникальной (например сводные таблицы, кэширование записей…) Поддерживает большое количество баз данных, в том числе: MySQL, PostgreSQL, Interbase, Firebird, Informix, Oracle, MS SQL, FoxPro, Access, ADO, Sybase, FrontBase, DB2, SAP DB, SQLite, Netezza, LDAP.
  • Doctrine
    Представляет собой объектно-реляционное отображение (ORM) в PHP 5.2.3+. Ключевая особенность этой библиотеки в том, что она позволяет писать запросы к базе данных в объектно-ориентированном виде, с помощью собственного диалекта SQL – Doctrine Query Language (DQL). Это мощная альтернатива обычным SQL-запросам.
  • PHPLINQ
    Набор PHP-классов для управления базами данных.

Работа с документами



  • TCPDF
    Класс, генерирующий PDF документы. Не требует других библиотек, поддерживает форматы ISO, в т.ч. UTF-8, Unicode, RTL и HTML.
  • PHPPowerPoint
    Работает на основе стандартов Microsoft OpenXML. Позволяет читать и записывать документы PowerPoint. Дает возможность управлять мета-данными (автор, название, описание, …), добавлять слайды и изображения в презентации и многое другое.
  • PHPExcel
    Также работает на Microsoft OpenXML. Позволяет читать и записывать файлы Excel. Возможности включают в себя: редактирование мета данных (автор, название, описание, …), управление электронными таблицами, шрифтами, стилями, добавление изображений и многое другое.
  • PhpRtf Lite
    Позволяет создавать и редактировать, совместимые с MS Word и Open Office Writer, RTF с помощью PHP. Позволяет контролировать практически всё. Совместим с кодировкой UTF-8.

Веб-сервисы



+115
28 сентября 2009, 11:43
673
kal1sha 108,8

комментарии (74)

+7
DorBer #
Большинство этих вещей реализуется фреймворками. Если надо все сразу, то лучше туда. А если по отдельности, то запросто. Хотя, наверняка, для подобных целей у всех есть свои велосипеды :)
Я, например, писал свой SmartPhotoResizer (даже имя почти совпало).
И не забывайте про хабракат :)
+19
enartemy #
Мне кажется каждый PHP-програмер когда-либо сам писал свой SmartPhotoResizer. :-)
+4
esenin #
Твой — я лично подпиливал под себя :)
–1
cream_brule #
Каждый php программер когда-либо писал свои 90% всего, что есть в этом списке.
0
Oleg_k #
TCPDF — просто однажды «спас» жизнь при сдаче одного проекта )))
не очень хорошо документирован, зато есть куча примеров на офиц. сайте
0
Buran #
Покажите мне мейлер лучше Swift. Я в свое время не нашел. Одна из лучших PHP-бибилиотек, которую я видел. И что по твоему «реализуется фреймворками»? Все фреймворки построены из таких более-менее независимых модулей. Так что твой контраргумент лишен всякого смысла.
0
DorBer #
Чем же вас не устраивает мейлер из того же ZF?
0
magnit #
Научите пожалуйста отправлять Swiftом письма в UTF-8
0
Buran #
Как не получается отправить? Есть определенные условия этой невозможности? UTF-8 в сабже, в теле, какой формат письма, какая кодировка?
0
magnit #
все по умолчанию
сабж и тело в UTF-8
русские буквы приходят в виде "?"

у них есть такой тикет 4 месячной давности, помеченый как new и никто не назначен
+10
alexeydg #
на phpclasses.org этого добра горы
+4
deerua #
Качеством не всегда блещут эти пыхыпыклассес ;) а так, да, есть где знаний почерпнуть ;)
+1
Buran #
phpclasses.org — склад по большей части говна. Автор статьи отобрал лучшие решения на его взгляд.
+2
Yeah #
Лучше уж PEAR — хотя бы стандарты одни и те же, а то замахаешься привыкать к привычкам авторов библиотек именовать классы и методы по-разному.
+1
ashofthedream #
Тогда уже не PEAR, а ZF в котором половина здесь описанного уж точно присутсвует
+2
Yeah #
Ну, тут ведь библиотеки, а не фреймворки обсуждаются. Набор библиотек больше в PEAR, а ZF ценен не этим, а тем, что это уже готовый каркас MVC приложения.
–1
kykapa4a #
Может быть раньше было именно так. Но последнее время большое развитие приобретают библиотеки, которые непосредственного отношения к MVC не имеют. А за счёт продуманной архитектуры ZF выигрывает у многих наборов библиотек, хотя пока собственная и не так велика.
+4
toxicmt #
ЗФ, раньше, был ценен именно как набор библиотек), да и сейчас почти любой компонент можно использовать отдельно от фреймворка.
0
Yeah #
Можно, но зачем, если все тоже самое есть в PEAR и нет риска тянуть за собой в виде зависимостей горы ненужного?

ПС: сам перешел на ZF с подключением по надобности библиотек из PEAR (это чтоб меня за ретрограда не приняли). Просто если по каким-то причинам использование ZF целиком невозможно, то лучше использовать PEAR, как библиотеку изолированных классов, чем иметь риск попасть на головняк с зависимостями.
0
toxicmt #
> Можно, но зачем, если все тоже самое есть в PEAR и нет риска тянуть за собой в виде зависимостей горы ненужного?

Можно из PEAR, но зачем если все тоже самое есть в ZF? ))

Все зависит от конкретной ситуации. Конкретно в моих проектах везде ZF и скорее всего я предпочту использовать компоненты ZF.
0
chetzof #
«зависимостей горы ненужного» — это вы о чём? Я недавно тупо скопировал Zend_Form в мой проект и всё заработало без каких-либо зависимостей.
+1
ashofthedream #
А, следом вы скопировали Zend_Controller, Zend_Exception, Zend_Filter, Zend_Json, Zend_Loader, Zend_Registry, Zend_Session, Zend_Validate, что бы действительно все заработало ;)
0
Nc_Soft #
id3 теги ZF уж точно не запишет
0
ashofthedream #
1. www.google.ru/search?q=zend_framework+id3
2. клик по первой ссылке.
3. Идем в последний девятый раздел, кликаем по ссылке.
4.…
5. PROFIT!

Да, древнейшний черновик, но имхо не хуже использования какого-то кода «в столбик» из библиотечки getId3
0
Rando #
А это ничего, что по первой ссылке у меня хабрахабр открывается? А снипет, ваш коммент :)
0
ashofthedream #
zfsearch.jpg - upload images with Picamatic
0
Nc_Soft #
Застрял на 4 пункте: просит Zend_Id3_Adapter_Id3v2_Frames которого там нету
0
ashofthedream #
Который там есть, но называеться Zend_Id3_Adapter_Id3v2_Frame.
+1
liaren #
Ага, я вот пытался из ZF компонент OpenId Provider вырезать, так в итоге понял что проще свой написать — уж слишком громоздкий этот ZF.
–2
moooV #
Предпочитаю велосипедить свои велосипеды.
+1
ilya_compman #
А мне пригодится! Спасибо!
0
wallaby #
можно еще добавить в список шаблонизаторы.
тот же Templating от symfony components.symfony-project.org/templating/
+2
kostyl #
0
enartemy #
Да, этот списочек посильнее будет пожалуй…
0
nmike #
похоже это полный вариант того, что привели здесь.
причем именно перевод (даже списки совпадают)
автор поскромничал на ссылку. спасибо вам.
+3
melfa #
Я дополню парочкой, которые сам использую. Они (на мой взгляд) мегаполезны.

Simple DOM Parser simplehtmldom.sourceforge.net/
Парсинг HTML и навигация по нему в стиле jQuery

RedBean ORM www.redbeanphp.com/
ORM без конфигов, схем данных и прочего, очень простой в использовании
0
melfa #
ПИАРЬТЕ В КОММЕНТАХ ВАШИ ЛЮБИМЫЕ БИБЛИОТЕКИ :-)

Мысль в следующем.

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

Если у вас что-то такое есть — напишите в комментариях название библиотеки, краткое описание и ссылку. Совсем здорово, если ещё кусочек кода.

Вы похвалитесь какие замечательные библиотеки знаете, да и людям польза.
0
Rhaps107 #
Палево?
0
melfa #
Вы о чём?
0
Rhaps107 #
По-моему вы ведете переписку с самим собой?
0
melfa #
Это не переписка, это дополнение к первоначальному комментарию.
+1
melfa #
Например, RedBean ORM.

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

Содержится в одном файле, подключается как:
require(«oodb.php»);

Имеет 2 режима работы, в одном структура базы меняется динамически, в другом структура фиксированна. Динамический режим для разработки, фиксированный режим для production (если конечно вы рискнете использовать это в production).

Инициализация в режиме dev:
RedBean_Setup::kickstartDev( «Page,Blog,Comment», «mysql:host=localhost;dbname=mydatabase» );
Первым параметром передаются предполагаемые названия классов, которые создаются для доступа к БД, вместе с таблицами.

Объект сохраняется так:
$page = new Page;
$page->setTitle( 'the leftmost page of the internet' );
$page->body = 'contains some interesting content';
$page->rating = 5;
$id = $page->save();

Доступ к сохранённому экземпляру:
$page = new Page( $id );
echo $page->title;
echo $page->getBody();

Можно импортировать поля из массива:
$employee->import( array('name'=>'John','badge'=>123) );

Или экспортировать в массив:
$arr = $bean->exportAsArr();

Есть поиск по SQL:
$persons = Person::where(' name LIKE {nm} and age > {ag} order by customerid asc ',
array('name'=>'Geor%','age'=>50))->getBeans();

Просто получить все записи из таблицы (массив массивов) можно через:
$persons = Person::findAll();

Как-то так.
–1
melfa #
Или вот Simple DOM Parser.

Создаётся из строки, URL или файла:
$html = str_get_html('Hello!');
$html = file_get_html('http://www.google.com/');
$html = file_get_html('test.htm');

Поддерживает поиск элемента по селекторам CSS:
// Find all element which id=foo
$ret = $html->find('#foo');
// Find all element which class=foo
$ret = $html->find('.foo');
// Find all anchors and images
$ret = $html->find('a, img');
// Find all anchors and images with the «title» attribute
$ret = $html->find('a[title], img[title]');

Поддерживает поиск по атрибутам:
$es = $html->find('table.hello td');
// Find all td tags with attribite align=center in table tags
$es = $html->find(''table td[align=center]');

Поддерживает chaining:
$e = $html->find('ul', 0)->find('li', 0);
$html->find("#div1", 0)->children(1)->children(1)->children(2)->id;

Прямой доступ к аттрибутам:
$value = $e->href;
// Set a attribute(If the attribute is non-value attribute (eg. checked, selected...), set it's value as true or false)
$e->href = 'my link';
// Remove a attribute, set it's value as null!
$e->href = null;

Минусом можно назвать то, что написано это на PHP, а значит жутко тормозное. Поскольку это DOM, то жрёт много памяти. Если обрабатывать этим много-много HTML-файлов, то надо обязательно после каждой обработки делать unset всем возможным переменным.

С другой стороны, очень уж удобно всё происходит.
0
nerezus #
Посмотрел ORM, понравилось, но вот дизайн сайта как-то наводит на мысль, что проект будет заброшен в любой момент.
0
melfa #
25 сентября сайт редизайнился. Не знаю как выглядел до этого :-)

А почему такая мысль?
0
nerezus #
Ну судя по дизайну(?) сайта над проектом сильно не заморачиваются.
Я исхожу из того, что сайт — лицо проетка.
0
melfa #
Гм. Может мы о каких-то разных сайтах говорим? Меня он наоборот поразил до глубины души своим ajax'ом и логотипом.
0
ibnteo #
Дизайн сайта отличный, не знаю даже где там можно придраться. У Apache, например, дизайн был всегда не очень, хотя сейчас получше уже. Да и программисты всё же не дизайнеры.
0
nerezus #
> Дизайн сайта отличный, не знаю даже где там можно придраться
Ярко-белое по ярко-черному режет глаза. Неплохо для привлечения внимания, но не для чтения документации.

> Да и программисты всё же не дизайнеры.
Зато дизайнеры дизайнеры.
0
ibnteo #
Так и скажите, что темная цветовая схема Вам лично не нравится. Дизайн то тут причём?
В FF можно отключить стиль, и читать чёрные буквы на белом фоне.

А дизайнеры они такие :)
0
nerezus #
> Дизайн то тут причём?
А представьте себе сайт конторы ритуальных услуг с качественным дизайном, но на тему вариаций Happy Tree Friends. Это будет качественный дизайн. Но плохой, т.к. не подходит для подобного сайта.

По поводу «мне лично не нравится» — то тут не все так просто, про это неоднократно писали.
–1
JN0iZzze #
в Избранное
+2
sergey2k #
Спасибо, полезные линки.
Не любят на хабре мнения отличные от личного. Это факт.
0
kikaha #
TCPDF действительно лучшая библиотека на сегодняшний день для генерации pdf документов, правда «лучшесть» её в наших глазах в том, что она безгиморойно работает с кириллицей (и в UTF тоже), и содержит набор готовых образцов на все случаи жизни
для отладки я бы добавил PHP Quick Profiler
0
Oleg_k #
не мог понять однажды, почему TCPDF отрабатывает только один атрибут в теге, а остальные игнорит. потом понял, что все значения аттрибутов надо брать в кавычки. до этого скопировал шаблон со страницы. невнимательность вобщем
–4
Rhaps107 #
Автору плюс за тему, относящуюся к PHP :) А библиотеки… Довольно легко находятся через поисковик. Проблемы нет с подбором нужных либ, скорее более актуален вопрос, кому какие либы подойдут к его коду.
–1
Rhaps107 #
Да мой комент не достоен жить, конечно, минусуйте… А по теме — Pear везде использовал PEAR и PECL и функционал не хуже того, что здесь приведен.
+1
enartemy #
Полезно, да.

Вот насчет капчи — добавли б список KCAPTCHA — www.captcha.ru/kcaptcha/. Все таки, чуть менее чем половина рунета ее использует.
–1
esenin #
а вот про AJAX и Базы данных сказано маловато.

Как насчет Mysqli, которая требует только расширения пхп в ext, и никаких других дополнительных php классов?
0
kostyl #
тут говориться не о родных расширениях…
0
MTonly #
PHPMailer после устранения ошибки Zend_Mail/Mime, связанной с порчей темы, в общем-то, стал не нужен. ;-)
0
flibustier #
AMF-PHP
Обмен данными с Flash в бинарном, родном для Flash формате AMF
www.5etdemi.com/blog/archives/2007/01/amfphp-19-beta-2-ridiculously-faster/
Имеется так же PHP модуль, существенно ускоряющий конвертацию
www.teslacore.it/projects/amfext/html/index.html
0
valeraorg #
— PHPMailer
Лучший класс для работы с эл. почтой. Поддерживает сообщения в цифровой форме, S/MIME шифрование, текстовые и HTML-письма, изображения, поддерживает несколько Email’ов, SMTP-аутентификация.
— Все перечисленное умеет делать SwiftMailer. Так чем же тогда он лучше вы так и не написали.
0
AntonShevchuk #
Попиарю себя чуть-чуть:
jQuery-PHP — библиотека по своему назначению схожа с Xajax — только заточена под jQuery: jquery.hohli.com/

Насчет большинства остальных библиотек — предпочитаю использовать Zend Framework или PEAR…
0
melfa #
А можно вкратце объяснить: что она собственно делает? Судя по примерам, библиотека где-то берёт HTML и что-то с ним делает, но я не понял где берёт, работает ли это на стороне сервера, а как это вообще подразумевается использовать.
0
recompileme #
Была печальная возможность сравнить библиотеку из PECLa для вытаскивания id3 тегов c getid3. Может getid3 и медленней чем модуль на СИ, но, по крайней мере, по фатал еррорам не сыплется.
0
tnz #
в PEAR еще есть библиотека для работы с IDv3, не пробовали?
0
recompileme #
не могу найти что-то…
0
Nc_Soft #
softtime.ru/info/articlephp.php?id_article=64
0
tnz #
0
recompileme #
спасибо, но это пхп класс. Не думаю что он быстрее getid3, а по функционалу проигрывает.
0
meglio #
Внимательно просмотрел весь список и радуюсь — около 50% уже есть в родном движке CodeIgniter-а, которым уже более года, как начал пользоваться. Еще раз убедился, что сделал правильный выбор.
0
ashofthedream #
Около 50% этого есть практически в любом фреймворке ;)
0
samlowry #
А где больше всего этого есть? :)

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