Как стать автором
Поиск
Написать публикацию
Обновить
129.45

PHP *

Скриптовый язык общего назначения

Сначала показывать
Период
Уровень сложности

Cобрать лучшее из двух миров — фреймворков и CMS (часть 1)

Время на прочтение7 мин
Количество просмотров31K
Четыре года — это в IT уже долгострой. Именно столько, и даже чуть больше времени мне понадобилось чтобы довести CleverStyle CMS до версии 1.0, до состояния когда архитектура устаканилась, имеется достаточная функциональность и целостность системы как таковой, все найденные баги исправлены, и основные сценарии работают без проблем.

Получилось создать что-то среднее между фреймворком и, собственно, CMS, как раз то, что нужно для разработчика, и хочу поделиться этим с сообществом.

Уверен, многим не хватало именно такого решения, это подтверждается многочисленными вопросами на том же Тостере и долгими ветками комментариев под ними.

Обязательно нужно объяснить почему


Сложность, избыточность, гибкость, функциональность и скорость.



Я не нашел решения, которое имело бы удовлетворительный для меня баланс этих параметров (безопасность тоже, но это очевидно и подразумевается само собой изначально).
CleverStyle CMS — это не CMS в привычном смысле, это CMF, выше фреймворка по уровню архитектуры но ниже и гибче CMS.
В связи с таким позиционированием получилось очень удобное решение в первую очередь для разработки уникального функционала, так как есть большинство необходимых инструментов, за которыми не нужно далеко идти, не нужно настраивать, а можно сразу использовать и получать результат.
Читать дальше →

Textolite — система управления статическим сайтом

Время на прочтение2 мин
Количество просмотров42K
В последнее время в сети все чаще стали появляться обычные статические сайты, что не может не радовать. Неповоротливость некоторых популярных CMS только растет, при этом довольно часто CMS вообще не нужна. Статические сайты удобны со всех сторон, в сравнении с динамическими одни только преимущества. Такие сайты удобно разрабатывать, удобно использовать, приятно посещать, но неудобно обновлять. Решением этой проблемы может стать система Textolite, о которой я хотел бы рассказать подробнее.
Читать дальше →

Хорошая практика в Symfony 2 (по личному опыту)

Время на прочтение2 мин
Количество просмотров12K
Доброго времени суток, уважаемые хабравчане. Сегодня увидел статью на хабре «Официальный гайд по лучшим практикам в Symfony» и понял, что мне есть что исправить добавить. К вашему вниманию список личных советов и объяснение к ним.

Используйте по меньше аннотаций


Лично я люблю аннотации, но с опытом понял, что они приносят некий дискомфорт. Дело в том, что всю конфигурацию перенести в аннотации нельзя. Остается 2 варианта:

  • Максимум в файлах конфигурации ( например yml);
  • Немножко в файлы, немножко в аннотации.


Если выбрать второй вариант, то при росте проекта получается каша. И в вашем коде аннотаций больше, чем логики. Отговорки по типу «так легче находить роуты» не принимаются. Так как если расскидывать файлы конфигураций правильно, ты всегда знаешь, где находятся роуты к определённым контроллерам. Я уже молчу про команды в консоли, по типу route:debug, и отладчик, в котором видно название екшена и имя роута.
Читать дальше →

Поучительная история о том, что может случиться с сайтом на shared-хостинге

Время на прочтение8 мин
Количество просмотров31K
Рабочий день медленно, но уверенно подходил к концу. Солнечный свет струился сквозь жалюзи и заливали офис золотистым багрянцем. Где-то в углу жужжала кофемашина, выдавливая остатки кофе из капсулы. Наш проджект что-то оживлённо обсуждала с дизайнером, а я правил косяки, любезно оставленные мне младшим программистом.
И всё вроде бы ничего, если бы не сообщение: «А что у вас с сайтом T?».
Читать дальше →

Сессии в PHP — подводный камушек при асинхронных запросах

Время на прочтение1 мин
Количество просмотров20K
Небольшая предыстория.

У меня есть хобби-проект трекер.ру
Алгоритм такой: пользователь вводит поисковый запрос, этот запрос «на лету» ищет торренты на сторонних трекерах (рутор, рутрекер, tfile и тд).
Для параллельного поиска идет одновременно несколько аякс запросов, которые должны обработаться асинхронно.
Однако, запросы выполнялись синхронно. Если какой-то трекер долго не отдавал ответ, то остальные запросы подвисали и ждали ответа от подвисшего трекера. Общее время выполнение запросов равнялось сумме всех запросов. Хотя, по моим планам общее время должно было равняться самому долгому запросу.
Долго ломал голову, почему так. Грешил на HTTP pipelining. Но, причина оказалась намного банальней. Все дело в сессиях. Дело в том, что сессии в php консистентны и php не даст обратиться другому процессу к уже занятой сессии.
Потыкать и полюбоваться результатом

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

Время на прочтение3 мин
Количество просмотров24K
Краулер Openstat при обходе сайтов Рунета, Байнета, Уанета, а также популярных русскоязычных сайтов из других доменов, ежемесячно собирает технометрики для 4,67 млн активных хостов (из 6 136 378 опрошенных).
Используемые технологии (Powered by) — самые длинные (в смысле «Long Data») данные, которые он собирает: количество позиций здесь значительно превосходит остальные метрики — 12 400. С ними неудобно работать, и поэтому для зачина покажу только начальные строки исходной таблицы для тех, кто хочет узнать, какие самые модные ныне версии PHP.
Читать дальше →

Горизонтальное масштабирование PHP приложений. Часть 1

Время на прочтение5 мин
Количество просмотров32K

Итак вы сделали сайт. Всегда интересно и волнительно наблюдать как счетчик посещений медленно, но верно ползет вверх, с каждым днем показывая все лучшие результаты. Но однажды, когда вы этого не ждете, кто-то запостит ссылку на ваш ресурс на каком-нибудь Reddit или Hacker News (или на Хабре — прим. пер.), и ваш сервер ляжет.

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

Гарвардский курс CS50x на EdX, перевод субтитров

Время на прочтение1 мин
Количество просмотров24K
image

Курс CS50 Introduction to Computer Science снова стартовал на сайте EdX. Напомню, что это курс Гарвардского университета и посвящен он основам программирования. Про этот курс уже писали на Хабре тут и тут. В рамках курса изучаются такие языки, как C, PHP, JavaScript.
Читать дальше →

Отладка с помощью XDebug и PhpStorm на примере сайта 1С-Битрикс

Время на прочтение3 мин
Количество просмотров131K
В этой статье я расскажу как удобно осуществлять отладку кода в PhpStorm на примере работы с веб-сайтом, работающем в системе 1C-Битрикс. Работать будем с IDE PhpStorm и отладчиком XDebug. Я предполагаю, что на вашем сервере уже установлен XDebug и у вас уже создан проект в PhpStorm.

В данной статье примеры приводятся с таким набором инструментов:
  • Веб-сервер — MAMP PRO
  • XDebug v2.2.3.
  • IDE PhpStorm 7.1
  • На моем локальном серевере установлен 1С-Битрикс 14 версии с решением интернет-магазина.


Итак, начнем.
Читать дальше →

Как мы подружились с PayPal

Время на прочтение5 мин
Количество просмотров19K

Дорогой иностранный гость с фамилией слишком известной, чтобы ее называть, гражданин PayPal только-только «сошел с корабля» на отечественный «причал», но уже успел стать своим на балу, где активно крутят танцы всех стилей и направлений электронные платежные системы российского сегмента. Мы не стали стоять в стороне и поспешили завести полезное знакомство со столь уважаемым товарищем, добавив, наконец, и его доброе имя в свой список друзей. С какой стороны подойти, о чем говорить и как привлечь его внимание читаем в небольшой истории под катом.
Читать дальше →

Поддержка интерактивной консоли PHP под Debian Linux

Время на прочтение2 мин
Количество просмотров9.3K
Наверное, многие сталкивались с вопросом неработающей интерактивной консоли PHP.

Когда вводишь
# php -a

и видишь только надпись «Interactive mode enabled», после которой что ни вводи, интерпретация и исполнение введённых команд не работает. На самом деле это не совсем так. На самом деле это специальный режим, которым надо ещё уметь пользоваться. Описание работы данного режима не входит в задачи моего поста. Для обычного же непосвящённого пользователя он выглядит именно так: ничего не работает. А вот тем, чтобы «работало» так, как мы привыкли в консолях python или node.js, мы и займёмся.

Читать дальше →

Простое решение для обработки изображений на лету с кешированием результата

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

  1. ресайз изображений под любые размеры (добавление новых размеров не должно вызывать головную боль)
  2. модификация изображений: добавление водяного знака, применение эффектов оттенки серого, сепия и вообще добавление новых эффектов не должно быть трудной задачей
  3. обработка изображения не должна влиять на основной поток (скорость загрузки страницы)
  4. для ускорения загрузки изображений на странице решение должно позволять обойти лимит одновременных соединений в браузерах, детальнее о лимите (рус)
  5. избежать возможность засорения сервера явной передачей параметров ресайза в url
  6. кешировать результаты работы

Читать дальше →

NoName Framework или Как я велосипед изобретал

Время на прочтение13 мин
Количество просмотров24K

Привет тебе, хабраюзер!

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

На данный момент фреймворк претерпел некоторые изменения, так что не все примеры из статьи могут работать, а структура фреймворка будет несколько отличаться.
Читать дальше →

Ближайшие события

Из говнокода в Highload. Используем ТАРАНtool. 5 рецептов повышения производительности

Время на прочтение14 мин
Количество просмотров33K
Ко мне обратился один руководитель стартапа социальной игры с просьбой увеличить производительность своего проекта. На этом этапе был сделан и запущен прототип проекта. И надо отдать должное разработчикам, что проект работал и даже приносил какую-то прибыль. Но, запускать рекламную компанию не имело смысло, так как проект не выдерживал ни каких нагрузок. Валился MySQL (35% ошибок).

Код проекта… В общем у меня осталось впечатление, что писал его недоученный студент… И это, немотря на то, что уже был сделан частичный рефакторинг другим программистом. Единственное, что радовало, то это то, что не использовался какой-либо фреймворк. Конечно, это вечно флеймовый вопрос: Иисус или Магомед? Быть или не Быть? Unix или Windows? Использовать или не Использовать? ИМХО, Моё мнение: фреймворки заточены под узкий круг типовых задач. Социальный проект — задача, как правило, не типовая… Но, в целом, мне проект показался интересным и я решил взяться за улучшение. На этом вступление можно закончить…

Наверно, про повышение производительности и тему highload не писал только ленивый WEB разработчик, знающий хоть что-то в этой области. Принципиально, что-то нового, в данной статье вы не найдёте. Основные идеи разработки highload проектов, были мною изложены в цикле статей HighLoad. Три кита.. Если вам интересно, как я увеличил производительность PHP проекта, используя NoSQL хранилище tarantool, то Добро пожаловать под кат.

Хотя, принципиально можно использовать другое, подходящее под данный круг задач, key/value хранилище, и реализация серверной логики может быть на любом другом скриптовом языке.
Читать дальше →

Symfony 2.2 — Уже Здесь!

Время на прочтение4 мин
Количество просмотров12K
image
Свершилось! Symfony 2.2 стал доступен для скачивания и это первый выпуск Symfony2 который был произведен в соответствии с нашим новым релиз-процессом. Во-первых, я бы хотел сердечно поблагодарить команду Symfony (разработчиков, авторов, блоггеров), которые помогли нам с этим выпуском. Все проделали грандиозную работу по внедрению новых возможностей, написанию документации для них, а так же корректировке и улучшении уже существующей базы.

Цифры


Что я могу сказать о новом релизе? Как и планировалось, Symfony 2.2 заняла 6 месяцев и состоит из 711 pull requests содержащих 2,035 коммитов, представленные 44 разработчиками (47191 добавлений и 13,512 удалений), документация получила 1312 коммитов от 41 автора (13038 добавлений и 3,336 удалений).

В итоге получилось 2035 коммитов и 711 pull requests за 6 месяцев, то есть в среднем, по 11 коммитов и 4 pull requests каждый день.
Читать дальше →

Вышел Symfony 2.2

Время на прочтение4 мин
Количество просмотров8.2K
Сегодня вышел Symfony 2.2.

Список нововведений из официального блога:

  • Console: Автозавершение в командной строке;
  • Console: Прогресс-бар для длинных заданий;
  • Console: Скрытие паролей в режиме командной строки;
  • Console: Предложение пользователю выбрать из списка возможных вариантов;
  • Finder: Фильтрация по пути;
  • Finder: Поддержка синтаксиса glob в методе in();
  • Finder: Увеличение скорости на некоторых платформах;
  • HttpKernel: Новый под-фреймворк для управления фрагментами ресурсов;
  • HttpKernel: Улучшен вид вывода фатальных ошибок;
  • HttpKernel: Логирование устаревших вызовов;
  • Process: Получение промежуточных результатов выполняющихся процессов;
  • Process: Перезапуск процесса;
  • Process: Получение статуса исполняющегося процесса;
  • Routing: Поддержка URL-хостов при маршрутизации;
  • Routing: Относительные URL для схемы и пути;
  • Security: Интересные утилиты безопасности;
  • Validators: Валидаторы относящиеся к платежным системам;
  • FrameworkBundle: Улучшение производительности для функциональных тестов;
  • FrameworkBundle: Кэширование статических страниц.

Также в Symfony 2.2 из существующего кода были выделены два компонента:
  • PropertyAccess;
  • Stopwatch.

Далее — более подробно о некоторых изменениях.
Читать дальше →

ООП-билдер «массивных» параметров

Время на прочтение3 мин
Количество просмотров8.9K
Многие фреймворки любят магию и сложные многоуровневые массивы для передачи параметров. Что первое, что второе — зло с точки зрения истинно-ленивого программера, который любит IDE и доки всегда под рукой, а не тыкать в интернет/тело вызываемого метода. Мы можем победить это, как образец взяв параметры метода из одного фреймворка и создав ООП-билдер.
Как же он выглядит?

Google Cloud Messaging – пишем backend на PHP

Время на прочтение8 мин
Количество просмотров30K
imageВ рамках туториала мы напишем полноценный класс для отправки сообщений на GCM сервер, который:

  • получает на вход массив данных для отправки
  • формирует пакеты для отправки размером до 4096кб каждый.
  • отправляет пакеты параллельными запросами.
  • анализирует ответ и знает:
    • успешно доставлено ли сообщение
    • тип ошибки


Читать дальше →

Скриншоты в облаках

Время на прочтение3 мин
Количество просмотров3.7K
image
Привет!

Многим из нас нужно иногда расшаривать свои скриншоты, и вместо того, чтоб слать по имейлу/скайпу файл скриншота, мы можем использовать сторонние сервисы, коих немало, и хранить фото там.

Но, благодаря ayurganov, мы можем настроить простой сервис Gyazo на своём хостинге с помощь статьи http://habrahabr.ru/blogs/soft/132937/

Я пошёл дальше и развил тему тем, что скриншоты мои хранятся на RackSpace CloudFiles — CDN от RackSpace, который без проблем выдержит любой «хабраэффект». А линк к файлам красиво шортится через Bit.ly.
Читать дальше →

Некоторые функции, которые я использую в своих проектах

Время на прочтение4 мин
Количество просмотров2.7K
Доброго времени суток, Под катом предлагаю Вам ознакомиться с функциями на PHP, которые я использую в большинстве своих проектов. В статье мы получим погоду для любого города мира при помощи Google, получим Whois и favicon домена, количество ретвитов определенной страницы и сделаем генератор ссылок на профили в твиттере, сделаем скриншот сайта, соберем css в 1 файл как у яндекса, распакуем zip и преобразуем картинку в ASCII-код.
Прошу под кат