Так уж повелось, что программисты закрепляют удачные решения в виде шаблонов проектирования. По шаблонам существует множество литературы. Классикой безусловно считается книга Банды четырех «Design Patterns» by Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides" и еще, пожалуй, «Patterns of Enterprise Application Architecture» by Martin Fowler. Лучшее из того, что я читал с примерами на PHP – это «PHP Objects, Patterns and Practice» by Matt Zandstra. Так уж получилось, что вся эта литература достаточно сложна для людей, которые только начали осваивать ООП. Поэтому у меня появилась идея изложить некоторые паттерны, которые я считаю наиболее полезными, в сильно упрощенном виде. Другими словами, эта статья – моя первая попытка интерпретировать шаблоны проектирования в KISS стиле.
Сегодня речь пойдет о том, какие проблемы могут возникнуть с инициализацией объектов в ООП приложении и о том, как можно использовать некоторые популярные шаблоны проектирования для решения этих проблем.
Читать полностью »
Рубрика «php» - 189
Проблема инициализации объектов в ООП приложениях на PHP. Поиск решения при помощи шаблонов Registry, Factory Method, Service Locator и Dependency Injection
2013-06-18 в 6:22, admin, рубрики: dependency injection, php, Registry, метки: dependency injection, PHP, RegistryДвуликий REQUEST_URI или в поисках корректного HTTP/1.1 сервера
2013-06-18 в 5:45, admin, рубрики: Apache, HTTP/1.1, mod_rewrite, php, Веб-разработка, метки: HTTP/1.1, mod_rewriteВы знаете, чем отличается %{REQUEST_URI} в Apache mod_rewrite от $_SERVER["REQUEST_URI"] в PHP?
Сможете в .htaccess на уровне Apache сделать корректную переадресацию 301 с домена с префиксом www или на него?
Для последнего вопроса я и сейчас не смогу предложить решение. Причина в протоколе HTTP/1.1, который пришлось изучить подробнее, когда «изобретал велосипед» (создавал ядро для сайта).
Всё дело в HTTP-заголовке запроса «Host:». При определённых условиях там может быть всё, что угодно, причём сервер должен полностью это проигнорировать согласно HTTP/1.1. Большинство же разработчиков используют значение этого поля, например, для SEO-оптимизаций. Забегая вперёд, скажу, что дополнительный прокси (например, nginx) позволит решить эту проблему.
Для иллюстрации некорректного поведения серверов решил перебрать сайты компаний Хабра. Для дюжины сайтов сделал это вручную, а потом обнаружил, что некоторые сайты на ошибочные запросы отвечают «правильно». После этого была написана небольшая утилита для тестирования, что позволило увеличить количество тестовых шаблонов и проверяемых сайтов.
Что же скрывает REQUEST_URI в HTTP/1.1?
Дайджест интересных новостей и материалов из мира PHP за последние две недели №19 (03.06.2013 — 17.06.2013)
2013-06-17 в 18:22, admin, рубрики: laravel, phalcon, php, phpunit, pinboard, silex, symfony 2, twig, Блог компании Zfort Group, Веб-разработка, дайджест, Новости, подборка, ссылки, метки: laravel, phalcon, PHP, phpunit, pinboard, silex, symfony 2, twig, Веб-разработка, дайджест, новости, подборка, ссылки
Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.
Приятного чтения!
Читать полностью »
Pinboard — мониторим PHP в веб-проектах
2013-06-12 в 16:37, admin, рубрики: errors, memory usage, php, pinba, pinboard, я пиарюсь, метки: errors, memory usage, monitoring, PHP, pinba, pinboardСуществует полезный и нужный инструмент для мониторинга PHP под названием pinba. Он позволяет собирать статистику по выполнению PHP-скриптов вашего проекта. Мы реализовали небольшую систему, которая дополняет Pinba, и назвали ее Pinboard (Pinba board).
Суть работы
Pinba хранит исключительно realtime-данные за последние несколько минут, что очень круто, но не всегда удобно. Pinboard же периодически агрегирует эти данные в собственное хранилище и предоставляет простые средства просмотра и анализа этой информации, а в ближайшем будущем и средства простейшего мониторинга.Читать полностью »
PHPUnit: простой синтаксис для создания mock-объектов
2013-06-11 в 14:58, admin, рубрики: mock, mockery, php, phpunit, метки: mock, mockery, phpunit
- почему не mockery
- основное преимущество — синтаксис
- моки — нативные
- создание stub-объектов
- мокирование свойств класса
- mock injection
- удобные методы для работы с Reflection
- как добавить в проект
Безопасная заливка файлов на сайт. Одно из тысячи решений
2013-06-11 в 14:56, admin, рубрики: php, upload, безопасность, скрипты, метки: upload, безопасность, скриптыСколько дискуссий было на Хабре по поводу опасности заливки файлов, обсуждались возможные уязвимости при заливке файлов и.т.д. Я тоже решил попробовать помочь в этом вопросе Вам, уважаемые читатели.
Как Вы все уже хорошо знаете, самый надежный способ защиты при заливке файлов, это:
1. Переименовывать файлы в имена и расширения файлов независимо от входящего имени файла.
2. Отключить в папке, куда заливаются файлы, выполнение скриптов.
Этот вариант отлично подходит для большинства случаев, когда заливаемый файл нужно использовать на сайте (например: аватар пользователя) и он требует записи в БД для привязки. Реализуется легко и об этом уже на Хабре есть статьи.
Мы же с Вами рассмотрим ситуацию, когда нужно сделать безопасную заливку файлов, без использования БД, с сохранением оригинальных имен и с возможностью заливать что угодно (без каких либо ограничений) с последующей возможностью скачивания данных файлов по URL.
Читать полностью »
Хороши ли __call или «Скорость Магии»
2013-06-10 в 15:32, admin, рубрики: php, магические методы, Программирование, скорость работы, метки: PHP, магические методы, скорость работыДля кого написана эта статья
Автор не будет пытаться научить читательа всяческим штучкам. Равно как и показать что-то новое, старое и убедить кого-то что-то использовать. Поводом для написания послужили вынужденные оптимизации скорости работы медленного кода. Оказалось, что медленно он работает именно из-за «Магических» методов в моем контексте. Поискав, автор не нашел четкой информации, как медленно работают магические методы — все, что нашел автор просто «медленнее», поэтому пришлось получать результаты самостоятельно. Так посмотрим же на все это с точки зрения сухой статистики!
Silicone Skeleton — настроенный Silex
2013-06-08 в 15:37, admin, рубрики: php, silex, symfony, метки: PHP, silex
Если вы не один раз начинали новые проекты с использованием Silex, то вы знаете что каждый раз в начале нужно настроить его под себя: добавить провайдеры, переопределить некоторые сервисы, определить структуру каталогов, и т.д. Со временем у вас появляется базовый набор для Silex которые вы используете для создания нового проекта.
Но если у вас его нету, предлагаю вам ознакомиться с моим: Silicone Skeleton.
Читать полностью »
Великое экранирование (или что нужно знать для работы с текстом в тексте)
2013-06-06 в 18:46, admin, рубрики: html, php, sql, XML, xss, атака, все равно никто не читает метки, Программирование, экранированиеSQL инъекции, подделка межсайтовых запросов, поврежденный XML… Страшные, страшные вещи, от которых мы все бы хотели защититься, да вот только знать бы почему это все происходит. Эта статья объясняет фундаментальное понятие, стоящее за всем этим: строки и обработка строк внутри строк. Читать полностью »