• IP Tool — База данных IP адресов

    Вступление


    Долгое время я пользовался библиотекой SxGeo от zapimir. И до недавнего времени меня всё устраивало. Устраивало до тех пор, пока не было необходимости добавлять в БД свои данные.


    Не найдя в интернете упаковщика данных от SxGeo и не найдя в себе силы требовать нужный мне функционал от разработчика, было принято решение писать свой костыль. Хотя на это решение повлиял и ещё 2 недостатка используемой библиотеки:


    • ограничение по количеству справочников;
    • невозможность узнать интервал адресов, в который входит искомый адрес;
    • отсутствие пакета в packagist.

    Собственно, делюсь с вами своей разработкой.

    Читать дальше →
  • PHP-Дайджест № 118 – свежие новости, материалы и инструменты (24 сентября – 9 октября 2017)


      Свежая подборка со ссылками на новости и материалы. В выпуске: PHP 7.2.0 RC 3 и другие релизы, 5 лет дайджесту, предложения из PHP Internals, свежая книга по асинхронному PHP, новое расширение-профайлер, и многое другое.
      Приятного чтения!


      Читать дальше →
    • Использование событийной модели в Doctrine 2 + Symfony 3

        Давайте представим ситуацию: у вас есть заказ в интернет магазине (Entity). Заказ имеет некий статус. При смене статуса заказа необходимо провести кучу сопутствующих действий, например:


        • сохранить в заказе дату последнего изменения
        • записать в историю по заказу информацию о смене статуса
        • отослать письмо / sms клиенту
        • вызвать метод API службы доставки / платежной системы / партнера и т.д.

        Возникает вопрос как все это правильно организовать с точки зрения программного кода.
        Все ниже описанное справедливо для Doctrine 2 и Symfony > 3.1

        Читать дальше →
      • О паттернах проектирования для работы с РСУБД

        Введение


        Работа с РСУБД является одной из важнейших частей разработки веб-приложений. Дискусcии о том, как правильно представить данные из БД в приложении ведутся давно. Существует два основных паттерна для работы с БД: ActiveRecord и DataMapper. ActiveRecord считается многими программистами антипаттерном. Утверждается, что объекты ActiveRecord нарушают принцип единственной обязанности (SRP). DataMapper считается единственно верным подходом к обеспечению персистентности в ООП. Первая часть статьи посвящена тому, что DataMapper далеко не идеален как концептуально, так и на практике. Вторая часть статьи показывает, как можно улучшить свой код используя существующие реализации ActiveRecord и несколько простых правил. Представленный материал относится главным образом к РСУБД, поддерживающим транзакции.

        Читать дальше →
      • Счетчик копий программы или сбор статистики об использовании

        • Tutorial
        Некоторое время назад выполнял я заказ для одной конторы. Суть проекта сейчас не важна (это был некий довесок к их корпоративной системе, который они ставили на компы своим клиентам), одним из требований было что бы приложение отправляло отчет об своем использовании. А попросту говоря, ребята хотели знать насколько их программа востребована среди клиентов. И вот на этой волне, возник у меня вопрос — а действительно, написал ты программу, отдал |продал в добрые руки или просто выложил ее в интернет. И что дальше? Сколько реальных пользователей ее увидели?
        Читать дальше →
      • Новый класс для MySql: писать запросы к базе теперь быстро, легко и удобно

          Проблема


          Когда я прихожу на новое место работы, то первым делом я смотрю на то, как организован слой для работы с СУБД. Я не работал с иными фреймворками помимо первого Yii, волею судьбы я попадаю на самописные решения, но везде я вижу практически одно и тоже — просто отвратительная реализация кода доступа к базам данных.

          Читать дальше →
        • Реклама помогает поддерживать и развивать наши сервисы

          Подробнее
          Реклама
        • Node.js и переход с PHP на JavaScript

          • Перевод
          Больше десяти лет я был PHP-разработчиком, но недавно перешёл на JavaScript, используя его серверные и клиентские возможности. До этого я уже был знаком с JS. Сначала работал с jQuery, потом освоил Angular, и, наконец, начал пользоваться React.

          Когда я начинал писать на PHP, я встраивал его в HTML-файлы. Получался не код, а полный бардак. Поэтому, для того, чтобы привести мои разработки в приличный вид, я начал пользоваться фреймворками, в частности, ZF1 и ZF2. Через некоторое время подход, при использовании которого начинают разработку с API, привёл к тому, что у меня оказался сервер, состоящий из сгенерированных REST API и из нескольких сотен строк моего собственного кода.



          Так как лишь небольшая и не самая важная часть наших проектов была написана на PHP, возник вопрос о том, можем ли мы от него избавиться. И, если можем, чего нам это будет стоить, и что мы от этого получим. В этом материале я поделюсь опытом с теми, кто, как и я, хочет, понимая, что и зачем он делает, уйти из мира PHP и встать под знамёна JavaScript во всех его проявлениях.

          Сегодня я расскажу, в основном, о своём путешествии с серверной стороны PHP на серверную сторону JS в виде Node.js. Здесь я не буду рассказывать о Webpack, React и о других клиентских технологиях JS.
          Читать дальше →
        • Sonata Import Bundle

            До сих пор одной из самых лучших админ панелей для Symfony является SonataAdminBundle, и не зря. Простая установка, конфигурация, множество фич “из коробки” и большое сообщество.

            Единственное, что в ней отсутствует, так это импорт файлов. Согласитесь, немаловажная функция.

            В сети лежит множество реализаций импорта для Sonata, но везде есть небольшие недочеты — возможность импорта только текстовых полей, а не сущностей, не работает с коллекциями, проблематично грузить огромные базы, которые могут обрабатываться не один час…

            Сегодня я хочу вам представить свою реализацию, которой успешно пользуюсь уже достаточно долго, но только сейчас руки дошли все это причесать и оформить в отдельный bundle.

            image
            Читать дальше →
          • Symfony + RabbitMQ Быстрый старт для молодых

            • Tutorial
            Всем доброго времени суток, друзья.
            Сегодня захотелось поговорить о том, как можно работать с RabbitMQ в Symfony и совсем чуть-чуть о некоторых подводных комнях. В конце я напишу парочку интересных моментов о кролике (рус. перевод «rabbit») для тех, кто совсем в танке.

            Я не буду рассказывать про сам RabbitMQ, поэтому если вы пока и этого не знаете, почитайте следующие переводы:

            Статья 1
            Статья 2
            Статья 3
            Статья 4
            Статья 5

            Не бойтесь примеров на перле или пайтоне — это не страшно, все достаточно понятно из исходного кода.

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

            Если вы уже знаете, что такое консумер и почему в нем нужно делать $em->clear() + gc_collect_cycles, а после закрывать соединение с базой данных, то, скорее всего, вы ничего нового для себя не узнаете. Статья скорее для тех, кто не хочет разбираться с AMQP протоколом, но которым нужно прямо сейчас применять очереди и выбор почему-то бездумно пал на RabbitMQ, а не тот же легковесный beanstalkd.
            Если же у вас микросервисная архитектура и вы ждете, что я расскажу вам как сварить коммуникацию между компонентами через AMQP, как красиво делать RPC, то я сам чего-то подобного очень давно жду на Хабре…
            Читать дальше →
          Самое читаемое