Метка «PHP» - 51

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

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

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

Наверняка, у многих есть собственные веб серверы. Настройка нового сервера с нуля — достаточно нудное и времяубивающее трудоемкое занятие не только для новичка, но и для бывалых.

А если к тому же по долгу службы вам приходится настраивать по несколько серверов в неделю/месяц, то невольно начинаешь задумываться об автоматизации этого процесса. Хочу поделиться bash скриптом, который я использую для начальной настройки RedHat / CentOS серверов.

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

Разработка архитектуры приложения с использованием инверсии зависимости

В этой статье я хочу ещё раз поговорить о разработке архитектуры приложения с использованием инверсии зависимости (Inversion of Control).
Я уже писал на хабре о библиотеке IoC и о Modular. Теперь я пошел ещё дальше и упростил все что только можно и попробую объяснить принципы построения архитектуры. А так же расскажу о новой библиотеке Granula.
Читать полностью »

Добрый день!
В этой статье мы расскажем о том, как мы работаем с кешем в plus1.wapstart.ru, какие проблемы у нас возникали и как мы решали некоторые частные случаи.

Для начала о терминологии.

Под «кешем» в этой статье я буду понимать какое-то быстрое хранилище, которое может использоваться, в том числе, и для кеширования. При этом хранилище должно обладать стандартизированным интерфейсом.
Сервер/хранилище — это какое-нибудь приложение, которое может хранить данные и давать к ним доступ по интерфейсу, который описан ниже. Например, этим приложением может быть memcached.

Мы используем фреймворк onPHP. В нем есть абстрактный класс CachePeer, от которого должны наследоваться все реализации кешей. Интерфейс любой реализации сводится к следующим методам.

		abstract public function get($key);
		abstract public function delete($key);
		
		abstract public function increment($key, $value);
		abstract public function decrement($key, $value);
		
		abstract protected function store(
			$action, $key, $value, $expires = Cache::EXPIRES_MEDIUM
		);
		
		abstract public function append($key, $data);

В нашем мире существуют следующие реализации CachePeer (кликабельно)
Обзор систем кеширования в onPHP
Читать полностью »

В этой статье мы расскажем, каким образом мы организовали работу наших сайтов в одном проекте на фреймворке yii.
В первой части приведем немного теории о том, в каких случаях такое может потребоваться и что для этого нужно.
А во второй части приступим к технической реализации.
Читать полностью »

За долгое время работы с Yii Framework накопилось некоторое количество полезного опыта. Хочу им поделиться с читателим. Всё что ниже написано — плоды рефакторинга и трезвого взгляда на код.

То, о чем я расскажу под катом:

  • Открытие одной и той же странички: через ajax-запрос (без layout) и обычное открытие странички вместе с layout
  • Кеширование моделей без кода в каждой модели
  • Как сделать логирование логики с минимальным кодом
  • Как обернуть всё в транзакции с минимальным кодом
  • Как сделать так, чтобы на каждом сервере (с экземпляром приложения) не менять файл основного конфига приложения. Упрощаем деплой

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

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

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

Хотя документация по данному API на Яндексе существует, и даже снабжена примерами, лично я не смог «с разбегу» разобраться, что к чему. Поэтому, если вам также интересна эта тема, прошу под кат.
Читать полностью »

В статье вы не найдёте сравнительных тестов шаблонизаторов. Зато найдёте информацию об использовании xslt в качестве шаблонизатора на реальных проектах. Рассмотрены возможности именованных шаблонов, использование шаблонов-функций, справочников.

1. Структура проекта

Обычно страница сайта состоит из нескольких общих блоков (меню, футер, ...) и контентной части, которую для общности будем называть основным блоком. Все эти блоки размещаются внутри некоторого индексного шаблона, который знает в каком месте какой блок отобразить: меню должно быть вверху, основной блок в центре, а футер внизу.

Получаем следующую структуру

/themes - здесь раполагаются все шаблоны
/themes/index/main.xsl - индексный шаблон
/themes/models/user.xsl - именованные шаблоны, которые относятся к модели пользователя
/themes/inc/functions.xsl - именованные шаблоны-функции
/themes/blocks/footer.xsl - шаблон футера
/themes/blocks/menu.xsl - шаблон меню
/themes/cabinet/main.xsl - шаблон основного блока главной страницы кабинета пользователя

Контроллер главной страницы кабинета пользователя работает следующим образом:

  1. получает данные для основного блока, обрабатывает их с помощью /themes/cabinet/main.xsl и результат (готовый html) помещает в итоговый xml
  2. аналогично обрабатывает данные для других блоков (меню, футер) и результат помещает в xml
  3. итоговый xml, в котором находятся данные всех блоков, обрабатывается с помощью индексного шаблона /themes/index/main.xsl и результат отдаёт пользователю.

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

Меня уже не один человек просил написать модуль для самого популярного грузового перевозчика Украины “Новая почта”. Дело это не на один час, поэтому руки никак не доходили. Но недавно я подумал, что если идея востребована, то почему бы не сделать что-то полезное для сообщества, а именно:
1. бесплатный модуль “Новая почта” с открытым кодом для Magento;
2. статью в нескольких частях с подробным описанием процесса.

Статья ориентирована на новичков в Magento, но, возможно, будет интересна и опытным разработчикам. Все исходники можно найти на GitHub: github.com/alexkuk/Ak_NovaPoshta/, они дополняются по ходу разработки.

Итак, начнем с постановки задачи. Модуль должен выполнять следующие функции:
1. добавить новый метод доставки в Magento;
2. настройки метода должны позволять задавать различную стоимость доставки для различного суммарного веса посылки (как в методе доставки Table Rates);
3. хранить и синхронизировать с Новой Почтой базу складов;
4. выводить склады Новой Почты в удобном для выбора виде на шаге Shipping Method оформления заказа, по умолчанию выводить только склады в городе пользователя;
5. добавить возможность отслеживания посылки в панель пользователя.Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js