Загрузка в несколько потоков с multi_curl и PHP

Когда нужно скачать сотню страниц, то можно обойтись моим компонентом Browser. Но недавно мне надо было скачать столько информации, что нужно было ждать неделю. Проблема в том, что компонент загружает страницы по очереди. Пришлось придумывать как заставить его качать в несколько потоков.
Читать полностью >>

3 комментария

Кеширование с помощью статических переменных и в моделях CakePHP

Как вы оцениваете свой уровень как программиста? Несмотря на то, что меня Влад дважды похвалил :) , я свой уровень оцениваю на 3 с плюсом (по 5-бальной шкале). Каждый день узнаю такие интересные финты, что хочется посыпать голову пеплом, за то, что сам до этого не додумался.

Сегодня узнал способ легко кешировать результаты функции, которые не меняются при условии одинаковых входящих параметров.
Читать полностью >>

11 комментариев

Как создать Behavior для CakePHP

Как я уже писал, я люблю выносить обработку данных в модели. При этом у меня часто получаются модели со схожими функциями, как в одном проекте так и в разных. А меня очень удручает, когда надо писать один и тот же код по несколько раз, а от копирования кода меня просто передёргивает, потому что я уже вижу как через полгода буду себя проклинать. До CakePHP я в таких случаях просто создавал общего потомка и там реализовал общую функциональность. Недостаток этого метода – это то, что в PHP можно наследовать можно только один класс.

К счастью, разработчики CakePHP придумали как удобнее выносить одинаковую функциональность из моделей. Эта возможность появилась в CakePHP 1.2 и называется behaviors.
Читать полностью >>

2 комментария

Тестирование моделей в CakePHP

Мне понравилось тестировать как можно больше всего в CakePHP. О том как тестировать компоненты, я уже писал, теперь пришло время моделей.

В поисках подходящего the fucking manual я набрёл на Testing Models with CakePHP 1.2 test suite на bakery.cakephp.org.
И всё очень хорошо расписано, но, блин, не работает и всё. Поэтому не читайте то, что там написано. Я тщательно изучив исходники методом научного тыка сделал так, чтобы всё работало.
Читать полностью >>

5 комментариев

Документация по CakePHP 1.2 (Beta)

В CakePHP 1.2 появилось очень много интересных вещей, которых так не хватало в 1.1. Но что теперь не хватает новой версии – это документации. Конечно, можно сказать, что ведь это бета и что надо подождать релиза, но ведь программировать надо уже сейчас. Иногда запутываешься в исходниках и хочется, чтобы кто-то объяснил как же оно работает.

Команда разработчиков CakePHP работает над новой документацией, но почему то не хочет выкладывать её в открытый доступ как исходники альфа-версий CakePHP 1.2. Я слышал, что производительность PHP можно улучшить на 500%, но Zend не делает этого из-за того, что тогда сократятся продажи Zend Accelerator. Может и разработчики CakePHP тоже думают, что так они больше заработают на консалтинге?

В любом случае, они однажды нечаянно выложили бета-версию документации по новой версии CakePHP в открытый доступ и куча людей её скачало. Я добавил к ней ещё 2 файла (pdf с cakephp.org, и jpg с какого-то блога), которые помогают лучше понять как оно работает.

Качайте:
Документация по CakePHP 1.2

UPDATE 26 Oct: Документация появилась в открытом доступе на http://tempdocs.cakephp.org/

2 комментария

Сортировка массива по полю или uasort на стероидах

Если часто надо сортировать массив по разным полям, то вручную лень писать callback-функции. А иногда надо сортировать ещё по нескольким полям. Тогда можно запутаться и наделать ошибок.

Кстати, если кто-то не понял, что я такое написал, идите на php.net/uasort и читайте как PHP способствует деградации программистов, потому что теперь почти никто не напишет сам 5 разных способов сортировки массива. В комментариях к документации я нашёл интересную функцию, которую немного доработал.
Читать полностью >>

9 комментариев

Вывод из PHP в Firebug. Helper для CakePHP

Как вы делаете отладку? В запутанных случаях я использую Zend Debugger, а в простых случаях пишу pr($variable).

Прочитав Ярослава, я вдруг осознал насколько удобно было бы не мусорить окно браузера, а красиво выводить отладочные сообщения в Firebug. Особенно приятно туда выводить сложные объекты и большие массивы так как Firebug позволяет удобно такие вещи просматривать.

Но реализация от Ярослава мне не подходит.
Читать полностью >>

8 комментариев

GoogleSearch: компонент для CakePHP, который парсит результаты поиска Google

Google – классная поисковая система, но почему то они закрыли доступ к поиску в нём через SOAP. Как говорила в далёком детстве школьная учительница английского “Shame on you”, ведь даже у Yandex есть Yandex.XML. Мы же не спамеры, нам 1000 поисков в день с головой достаточно.

Но, пока можно искать через браузер, можно искать через Browser :)
Попробуем применить наш компонент в боевых условиях.
Читать полностью >>

6 комментариев

Browser: компонент для CakePHP

Мне часто приходится обрабатывать информацию с других сайтов и наконец я решил написать свой компонент Browser.

Функциональные возможности

  • Корректно разделяет header и body
  • Может кешировать запросы
  • Может отправлять POST-запросы
  • Может работать через proxy
  • Поддерживает cookies
  • Может автоматически вводить имя пользователя и пароль
  • Автоматически подставляет referer с прошлой страницы (можно установить свой)
  • Подставляет нормальный UserAgent, чтобы сайты не думали, что это робот

Читать полностью >>

11 комментариев

Тестирование компонентов CakePHP

Проникшись идеей Test-Driven Development, я решил наконец делать тесты для новых проектов. Предлагаю написать компонент Browser, на котором посмотрим как тестируются компоненты.
Читать полностью >>

6 комментариев