Недавно мне потребовалось сделать небольшой парсер на php для интернет-магазина. Я не стал изобретать велосипед и взял стандартную библиотеку. Но тут наткнулся на неожиданную проблему — библиотека парсит только правильно сверстанные сайты. Мой таким не был. Выходом из этой проблемы оказалось использование ещё более громоздких библиотек в которых сам черт ногу сломит. Я бросил это дело и решил парсить обычными регулярными выражениями. Всё шло хорошо когда парсились простые строки вроде цены и заголовков, но как дело дошло до средних размеров текста в котором встречаются теги br, stong и другие появились сложности. Читать полностью »
Рубрика «php» - 236
Простой способ парсинга сайтов
2012-07-16 в 10:43, admin, рубрики: php, парсинг, метки: PHP, парсингИнтересные советы по php собранные все в одном месте
Мало кода, много слов, заинтересованных прошу под кат
LINQ для PHP. Часть 2. Если гора не идёт к Магомету, Магомет идёт к горе
2012-07-15 в 19:25, admin, рубрики: functional programming, linq, php, phpstorm, sql, похапэ, Программирование, функциональное программирование, метки: functional programming, linq, PHP, phpstorm, sql, похапэ, функциональное программированиеКак можно было заметить из моей предыдущей статьи со сравнением библиотек LINQ для PHP, библиотек много, а качества мало: ленивые вычисления не реализованы ни в одной библиотеке, тесты есть в половине случаев, типы коллбэков ограничены, а иногда и вовсе незнамо что выдаётся за LINQ. Поэтому я написал свою библиотеку. Встречайте:
YaLinqo — Yet Another LINQ to Objects for PHP
Возможности:
- Самый полный порт .NET LINQ на PHP, со многими дополнительными методами. Некоторые методы отсутствуют, но работа ведётся. Всего реализовано более 70 методов.
- Ленивые вычисления, текст исключений и многое другое, как в оригинальном LINQ.
- Детальная документация PHPDoc к каждому методу. Текст статей адаптирован из MSDN.
- 100% покрытие юнит-тестами.
- Коллбэки можно задавать замыканиями, «указателями на функцию» в виде строк и массивов, строковыми «лямбдами» с поддержкой нескольких синтаксисов.
- Ключам уделяется столько же внимания, сколько значениям: преобразования можно применять и к тем, и к другим; большинство коллбэков принимает на вход и то, и другое; ключи по возможности не теряются при преобразованиях.
- Минимальное изобретение велосипедов: для итерации используются Iterator, IteratorAggregate и др. (и их можно использовать наравне с Enumerable); исключения по возможности используются родные похапэшные и т.п.
Пример кода:
// Отфильтровать продукты с ненулевым количеством, поместить в соответствующие категории,
// отсортированные по имени. Продукты отсортировать сначала по убыванию количества, потом по имени.
from($categories)
->orderBy('$v["name"]')
->groupJoin(
from($products)
->where('$v["quantity"] > 0')
->orderByDescending('$v["quantity"]')
->thenBy('$v["name"]'),
'$v["id"]', '$v["catId"]', 'array("name" => $v["name"], "products" => $e)'
);
Простой сервер задач с очередью в MySQL (без проблем с блокировками)
2012-07-15 в 16:47, admin, рубрики: mysql, php, метки: mysql, PHP Почти в каждом более менее динамическом проекте бывает возникает необходимость выполнять очереди задач в фоне (отправка email, обновления кеша, реиндексация поиска и т.д.). Job сервера (Gearman и т.п.) хороши, но для большинства простых задач они избыточны. Классическая реализация очередей в MySQL (при помощи SELECT … LOCK FOR UPDATE) при росте нагрузки со временем начинает приводить к проблемам с блокировкой. Потому, как это обычно бывает, пришлось написать свой «велосипед» для работы с фоновыми задачами, который бы «точно работал» и был предельно прост.
Читать полностью »
Жизнь на собственном сервере
2012-07-15 в 6:47, admin, рубрики: diy или сделай сам, NAS, open source, opensource, php, метки: NAS, opensource, PHPПокупать готовое устройство для организации домашнего сервера (NAS) может и более простой способ, но точно не самый интересный. А сделать такой сервер можно по разному.
Например, лет 10 назад у меня был старенький системный блок с одним HDD под управлением linux. Его главной задачей было — держать SMB-шару. Позже, с появлением жены, требования к такому серверу изменились: он должен быть маленьким (занимать мало места), не гудеть и не потреблять много электричества. Поэтому систему пришлось менять.
WordPress Plugin длиной в одну страницу
2012-07-12 в 22:28, admin, рубрики: javascript, php, plugin, wordpress, метки: javascript, PHP, plugin, wordpressПочему люди любят WordPress? Потому что с ним просто работать. В нём нет гибкости большущих CMS вроде Joomla и Drupal, — а значит, не запутаешься. И ещё он очень популярен — а значит, можно найти плагины на все случаи жизни.
Неспроста несмотря на осуждение со стороны Lurkmore.ru, WordPress-ом пользуются и Герб Саттер, и Марк Шаттлворт, и много кто ещё. Например, я.
В своих записях я очень часто ссылаюсь на чужие блоги. И мне пришла идея — а почему бы не показывать рядом с ником человека, на которого я ссылаюсь, ещё и значок его сервиса? Например, птичку из твиттера или букву B из блогспота? Похожий функционал есть, например, в Википедии, да и многие блогохостинги это позволяют (например, Dreamwidth).
Так и родился плагин для WordPress Rikki's WP Social Icons. Позволяет за один клик мышкой добавить ссылку на эккаунт в каком-нибудь сервисе, от социальной сети до GitHub.
Читать полностью »
Загрузка и отправка формы по AJAX на Drupal 7
2012-07-12 в 18:48, admin, рубрики: ajax, drupal, php, метки: ajax, drupal, PHP Недавно мне потребовалось реализовать сабмит формы по AJAX. При этом форма должна загружаться в попапе. Казалось бы задача тривиальная, но оказалось что все же есть подводные камни.
Задача решается для Drupal 7. В качестве библиотеки для создания popup'ов используется fancybox.
Читать полностью »
PHP 5.4 был опубликован четыре месяца назад, так что, вероятно, слишком рано смотреть на новую версию PHP. Тем не менее я бы хотел сделать для всех, кто не подписан на внутренний список рассылок, небольшой предварительный обзор того, как может выглядеть PHP 5.5.
Однако необходимо понять: PHP 5.5 еще на ранней стадии развития, поэтому никто не знает, как он будет выглядеть в итоге. Все, о чем здесь написано это только предложения. Я уверен, что не все это будет в PHP 5.5, или будет, но не в таком виде.
Так что не стоит слишком возбуждаться :)
Теперь, без лишних церемоний, список фич, над которыми ведется работа в PHP 5.5:
Читать полностью »
Несколько заблуждений распределенных вычислений для PHP разработчика
2012-07-12 в 10:52, admin, рубрики: php, заблуждения, ошибки, Программирование
Семь заблуждений разработки распределенных вычислительных приложений были придуманы в 1997 году человеком, по имени Peter Deutsch. Позже, восьмой был придуман Джеймсом Гослингом (отцом Java).
Эти заблуждения имеют непосредственное отношение к нам, PHP разработчикам, так как мы строим распределенные приложений каждый день. Мы строим гибридные приложения, которые взаимодействуют с аутентификацией пользователей с помощью Facebook, Google, Twitter или API, получают информацию из удаленных баз данных и служб кэширования и т.д. Не делайте ошибки, на построениях распределенных компьютерных приложений.
Учитывая, что мы строим распределенные приложения, важно, что мы понимаем ошибки и как они влияют на нас. Я приведу несколько подобных заблуждений.Читать полностью »
Введение в PHP 5.3 замыканий — одно из главных его новшеств и хотя после релиза прошло уже несколько лет, до сих пор не сложилось стандартной практики использования этой возможности языка. В этой статье я попробовал собрать все наиболее интересные возможности по применению замыканий в PHP.
Читать полностью »