• Класс для обработки, добавления эффектов и обрезки изображений на PHP

    В php для работы с изображениями есть замечательная библиотека GD2. С помощью нее можно делать с изображениями различные манипуляции такие, как негатив, оттенки серого, ватермарка, яркость, контраст и др. Все это можно делать, но в самой библиотеке нет API для этого, всю обработку нужно описывать самому. Однако все подобные велосипеды давно написаны и один из лучших на этом поле является класс tulipIP. 

    В этой статье я расскажу, как работать с данным пакетом на примерах. Для начала небольшая демонстрация работы. До:

    .Великолепная Элизабет Душку до обработки беблиотекой tulipip php

    И после

    Великолепная Элизабет Душку после обработки беблиотекой tulipip php

  • Кросс доменная ajax загрузка файла на сервер

    Я пытаюсь создать cross domain AJAX форму загрузки и решить несколько вопросов. Я буду использовать Ajax Upload - наиболее удобный ajax загрузчик. Этот загрузчик прекрасно работает на одном домене и очень прост в настройке.

    Примечание переводчика: Статья незавершенная, готового решения в ней нет, решил перевести ее потому-что часть кода использованного в ней мне помогло, однако повторюсь, что это не урок.

  • Многопоточные парсеры

    Парсер, парсер, парсер

    Который год пишу парсеры, и знать ничего не знал про многопоточность. В продвинутых компилируемых языках типа C++, Delphi и даже в старом добром, интерпретируемом Perl, многопоточность одна из главных составляющих. Никто бы не стал пользоваться приложением, если бы его окно зависало во время больших вычислений. Программистам PHP повезло меньше. Этот язык вырос из шаблонизатора, и каким бы он не был удобным по сути шаблонизатором и остается. Многопоточности в нем попросту НЕТ. Наверно поэтому  большинством уже упомянутых сиплюсоидов и делфистов считают PHP недоязыком.

    Однако порой наступает случай, когда запуск одного и того же PHP скрипта, одновременно с разными параметрами, здорово увеличивает производительность. И многопоточные парсеры тому пример. Однако стоит опять упомянуть, что потоков в языке нет, и все что будет изложено ниже, это всего лишь псевдо мультипоточность. Все дело в том, что запросов к серверу донору можно посылать хоть сколько, лишь бы канал работал. А потом, в цикле основного потока, проверять какой из запросов отработал. Вот и все чудеса. Обработка данных происходит также в одном потоке, а вот их прием и пересылка в нескольких. Это значит, что  в момент пока запрос №2 еще не завершился, а №1  уже вернул результат, мы можем обрабатывать его труды.

  • Несколько баз данных в моделях Laravel

    При разработке CRM системы, довольно часто, основной сайт компании, лежит где-то рядом. И обычно использует другую базу данных. Распространенная задача - выдернуть какие-то данные из этой базы внутри CRM, используя модели. Как это сделать? Как использовать 2 или более подключения для ActiveRecord в Laravel

    Этот пост о том как использовать несколько баз данных, а не про балансировку нагрузки или менеджер переключений между базами

  • Оповещение пользователя на сайте

    В web-проектах, важную роль играет обратная связь пользователя и сайта. Так уж заведено изначально, что пользователь теряет всякую связь с сайтом после того, как закрывает вкладку с ним. Что бы пользователь еще раз зашел на сайт, его нужно туда привлечь.

    В обычных блогах или форумах используют для этого e-mail рассылку. Это самый дешевый вид рассылки. В php есть даже специальная функция mail. Но пользоваться ей, в серьезных проектах, не рекомендуется. На это есть ряд причин. Первая из них это надежность, а точнее ненадежность. Функция не сама посылает письмо, а отправляет его на внутренний mail сервер. А уже он занимается пересылкой. Сама же функция возвращает только статус того, ушла ли операция отправки на сервер удачно. Отправлено ли письмо она узнать не может.

  • Парсер для заполнения Joomla сайта или программное добавление статьи в Joomla через php

    Продолжая тему парсеров. Одна из самых распространенных задач, которые я постоянно встречаю - заполнить Joomla сайт на основе другого сайта. Полный переезд, обычно с более старой версии Joomla, но быть может и с другой CMS, не важно.

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

    В идеале парсер должен съедать лишь одну страницу сайта на входе и обходить все найденные страницы сам. В статье Как написать универсальный парсер сайтов за 1 час я уже рассказывал, как это сделать. Когда дело касается переезда на Joomla, то необходимо точно воссоздать структуру сайта донора, посему немного упростим задачу, и будем парсить лишь заданный список ссылок, который будет определенным образом привязан к конкретному разделу из сайта источника. А этот самый раздел на нашем сайте, создадим руками.

    Т.е. в этой статье мы автоматизируем рутинные операции копипаста: копирование текста, создание статьи в материалах, создание ссылки на статью в меню.

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

  • Простейший синонимайзер на php

    При написании одной доски объявлений, заказчик, как водиться, попросил написать парсер объявлений с известных досок. 

    На современном уровне развития антиспам систем, сграбить новые объявления не так и просто с задачей я справился. Пришлось применить парочку хитрых приемов с COM объектом Интернет Эксплорера. Но сейчас не про это.

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

  • Распаковка zip архивов на сервере через PHP

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

    Распаковка файлов на стороне сервера при помощи нативных средств php

  • Создание компонента Joomla с нуля. Часть 1

    Создание компонента в Joomla надо начинать с создания XML файла с названием расширения. Если говорить на чистоту, то это не обязательный файл, для работы компонента. Если создать папку с названием компонента и прописать его в табличке jml_components в базе, то компонент отработает только при наличии другого php файла с идентичным названием. Однако, про php файл я расскажу в другой статье. Здесь мы сделаем лишь XML заготовку. Приступим.

  • Создание компонента Joomla с нуля. Часть 2. PHP файл

    В прошлой статье мы создали компонент. Создали XMl файл, в котором прописали название компонента. Если упаковать данный файл в zip архив (упаковывать нужно именно XML файл и все содержимое папки, а не саму папку) то такой компонент легко устанавливается  в Joomla. Однако он. очевидно, ничего не делает. Бизнес логику компонента выполняют php файлы. Минимум, это может быть всего один файл в корне компонента с названием компонента. К примеру, если наш компонент называется com_moy_component то название php файла должно быть таким moy_component.php