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

PHP *

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

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

Бесплатная Zend Studio

Время на прочтение1 мин
Количество просмотров13K
Прошу обратить внимание всех Zend Certified Engineers, что начиная с 27 марта Вы можете получить бесплатную копию Zend Studio и Zend Server. Скудные подробности по ссылке Free Zend Studio и Zend Server
А тем, кто еще не стал ZCE, думаю это послужит еще одним дополнительным стимулом для того что бы собраться и наконец сдать этот экзамен. Поверьте это не очень сложно ;)

Сделай сам ACL. История разработки и написания несложной системы контроля доступов

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

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

Посмотрел я существующий код, желания в себе не почувствовал для переделки, — и решил подыскать готовое решение. Сразу скажу, — я большой противник «велосипедов», прежде чем что-то написать я всегда стараюсь найти готовое и подходящее решение. Так было и на этот раз, но достаточно безуспешно. Несколько решений есть, например, в коллекции PEAR, но подходящего я не выбрал. Много кода устарело (мы используем версию PHP 5.3), поэтому было принято решение писать ACL самостоятельно.

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

Подробнее об анализаторе исходного кода PHP Depend

Время на прочтение4 мин
Количество просмотров5.5K
image В одном из обзоров на Хабре уже упоминался анализатор кода PHP Depend (http://pdepend.org/). В данном материале хотелось бы рассмотреть небольшой пример его использования и интерпретации результатов.
Читать дальше →

прикручиваем плагины от Idea к WebIde

Время на прочтение2 мин
Количество просмотров905
Сегодня успешно закончив написание одного маленького, но очень полезного лично для меня плагина к IDEA, расстроился из-за невозможности прикрутить его к WebIDE, хотя в Idea 7/8/9 полет нормальный.
И вот, взрустнув и занявшись сравнительным анализом «старых» и «новых/кошерных» плагинов, обнаружил способ прикрутить к JetBrains WebIDE почти любой плагин от IDEA, коим и спешу поделиться :)
Читать дальше →

PHP: Реализация формальных грамматик

Время на прочтение7 мин
Количество просмотров2.1K
Недавно мне нужно было написать парсер для строки поиска, который приводит строки вида
(aa&bb)^(!cc^!(dd^ee)) в строку вида куска SQL: (?f LIKE "%aa%" AND ?f LIKE "%bb%") OR (?f NOT LIKE "%cc%" OR !((?f LIKE "%dd%" OR ?f LIKE "%ee%")) ). Я написал like и SQL для упращения, на самом деле там был SPHINX, да и не оптребовалось оно в конце концов, но разговор о том как я этого добился написав формальные грамматики и реализовав их на PHP.
Читать дальше →

VS wizard: PHP extension

Время на прочтение1 мин
Количество просмотров2.1K
Около месяца назад экспериментировали с написанием экстеншенов и столкнулись с реальной проблемой: если в *nix разработка проста и прозрачна, то в винде можно огрести стразу куеву хучу гемора, причем решение далеко не очевидно.

Как известно, php <=5.2 собирают с помощью музейных версий VC, попытки же собрать версиями 7-9 были обречены на неудачу: либо не собиралось, либо падало в процессе работы.
В 5.3 версии разработчики сделали возможность собрать PHP при помощи VS 2008, так что эта проблема решена. Но… собирать экстешнены гораздо проще. Даже новыми версиями VC под PHP <= 5.2.
Мы сделали решение, простое и прозрачное, которое в пару кликов мыши создаст проект под VS 2008(ориентировались на standard+ версии).
Если вы знакомы с разработкой расширений, качайте наш визард и собирайте под винду без проблем.
А если не знакомы — то ждите завтра-послезавтра статью, черновой вариант дописан.
Итак, качайте PHP extension. Он снабжен установщиком, так что проблем не возникнет ;)

Затмение, лисичка и xdebug

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

Длинное и пространное вступление



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

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

1. Психологическом: Стараюсь не злиться на того кто это написал, а
просто разбираюсь с тем как это работает. Не поверите, в области
висков от этого становится непривычно легко, лицо становится более
доброжелательным и код выглядит более понятным.

2. Организационном: Применяю краткую выжимку из GTD: а) собирай все,
б)перечитывай то что собрал в)делай это. У этого направления есть
также техническая сторона, но о ней не сегодня. Главное при
перечитывании (пункт б) не «возвращать» дела не приняв каких-либо
внятных решений по их дальнейшей судьбе. К слову «разобраться с этим
позже» это вполне внятное решение.

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

Как сделать свой сервис временной почты

Время на прочтение1 мин
Количество просмотров6.4K
Не так давно была у меня необходимость во многих уникальных почтовых ящиках. Регистрировать их вручную было слишком долго и я решил воспользоваться сервисами наподобие tempinbox.com. Но почти сразу возникла проблема, ни один из них не одобрял автоматического использования. После этой попытки я понял что отвертеться мне не получиться и полез в раздел настройки почты своего кривенького VDS. Как оказалось все очень просто.
Читать дальше →

allow_url_fopen на виртуальном хостинге: добро или зло?

Время на прочтение1 мин
Количество просмотров21K
Приветствую всех!
Держу сайты на двух разных виртуальных хостингах (не VPS, а shared hosting). Сайты на лёгких CMS с открытым кодом. Когда количество сайтов превысило количество пальцев, решил сделать так, чтобы сайты сами апдейтились. Для автоапдейта необходимы опции: cURL включён, safe_mode выключен, open_basedir выключен, allow_url_fopen включён. И столкнулся с тем, что один хостер «из соображений безопасности» не даёт включить в моём php.ini опцию allow_url_fopen. Другой хостер даёт и автоапдейт работает. На вопрос отвечает, конечно же: наплюй и неси все сайты ко мне – у нас всё чётко.
Не знаю, кому из них верить (в рнр настолько не разбираюсь). Более того, предполагаю околорелигиозную тематику. Поэтому: прошу вашего мнения. И, пожалуйста, не холиварьте;)
ап> суть вопроса: включённый allow_url_fopen это дыра или нет, если да, как эффективно закрывается и почему первый хостер предпочитает не позволять, чем закрывать дыру.

Ещё один php шаблонизатор

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

Доброго времени суток,

Хочу рассказать о своём шаблонизаторе для проектов на PHP.
Понимаю, что рискую быть обвинённым в изобретении велосипеда, поэтому объясню свои мотивы: Большинство шаблонизаторов меня не устраивают изначально, среди них Smarty, Quicky и все им подобные, причина — мне кажется, что шаблонизатор должен избавлять от использования логики в шаблонах, а не навязывать свой синтаксис для той же логики.
Иначе говоря, такой:
  1. {?$x = 2+2}
, или такой
  1. {foreach name=my from=array('One','Two','Three') key="i" item="text"}
подходы для меня абсолютно неприемлимы!
Пожалуй, из всех шаблонизаторов больше всех удовлетворяет моим требованиям xtemplate, но у него есть целый ряд недостатков которые меня раздражают, например то, что все страницы нужно обрамлять в блоки, или то, что он интерпретирует шаблоны, а не компилирует, благодаря чему скоростью похвастаться не может. Ну и последнее — я решил написать шаблонизатор так, чтобы не было никаких проблем с добавлением функционала, а также, чтобы он был совместим с нативным шаблонизатором, который я использовал до этого, и к которому привык. Дело в том что конструкция 
  1. $tpl->assigned_var='abc';
которую часто используют нативные шаблонизаторы, мне нравится гораздо больше чем что-нибудь вроде:
  1. $thl->assign('assigned_var','abc');
Читать дальше

PHP Шаблонизатор Quicky версия 0.5.x

Время на прочтение3 мин
Количество просмотров1.9K
Основные изменения по сравнению с 0.4.x: (http://code.google.com/p/quicky/)
[~] {math} теперь компилируется в нативный PHP-код.
[~] Отображаются номера строк при ошибках компиляции, ошибки компиляции выдаются сразу все, а не по одной, показывается тег, в котором ошибка.
[+] Добавлена функция {debug} отображающая debug-консоль (о том почему у Quicky наиболее совершенный дебагер читайте под катом).
Читать дальше →

Определение периодов времени по текущей дате

Время на прочтение9 мин
Количество просмотров1.4K
Как-то недавно появилась задача сделать выборки из БД по разным периодам времени в зависимости от текущей даты. Для этих целей я реализовал класс с некоторым набором функций, определяющих концевые участки необходимых временных отрезков.

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

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

Функции для работы с объектами работают и с классами (PHP 5.2)

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

Использование PHP и MySQL для создания KML

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

Отсебятина


Кросс-пост четвертого перевода туториалов по Google Maps API из моего блога.


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

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

Посоветуйте систему полнотекстового поиска

Время на прочтение1 мин
Количество просмотров3.7K
Гуглил, нашел много разных вариантов, но ни один не удовлетворял простым условиям:
— Легкость установки. Простота настройки (не более 4х часов с момента начала чтения документации).
— Поддержка русской морфологии. Как плюс — английской.
— Возможность индексации по Веб.
— Выдача результатов по релевантности. Хорошая ранжировка по релевантности

Risearch.org — хорошая, полная версия на Перле и платая. MnogoSearch — очень громоздкая в настройке, мне столько опций не нужно. В ряде других вариантов — простые стеммеры, либо вообще отсутсвие любой поддержки русского языка. Ладно, пусть будет даже стеммер, но у результатов должна быть высокая релевантность.

Методы доступа. Наиболее популярные ситуации

Время на прочтение3 мин
Количество просмотров42K
Статья в первую очередь расчитана на начинающих разработчиков, либо для тех, кто только начинает переходить от процедурного стиля программирования к ООП, посему матерых гуру просьба не вгонять в минуса :)

Права доступа к свойствам и методам — это на первый взгляд всего лишь три слова: private, protected и public. Но что скрывается за ними? Какие преимущества это дает в разработке? И как их правильно использовать? Здесь, как и во всех других аспектах программирования, без практики не разобраться…

Одна из трех основных концепций ООП — наследование (другие две: инкапсуляция и полиморфизм). Вобщем-то именно для нее и были реализованы права доступов. Основанная идея наследования: Дочерний объект, при наследовании (extend) родителя перенимает себе все родительские методы и свойства, а так же может обзавестись своими собственными. Понимая эту базу, можно перейти в всему что находится ниже…
Читать дальше →

Нужно ли в PHP перед вызовом функций ставить обратный слэш?

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров650

Несколько лет назад я прочитал статью «How to dump and inspect PHP OPCodes» в которой наконец увидел, что опкоды в PHP действительно существуют. И кроме того, мы, разработчики, которые пишем на PHP на эти опкоды можем влиять, тем самым оптимизируя производительность нашего кода. В статье так же рассказывалось о том, как применение бэкслэшей может ускорить выполнение программ. Я был под впечатлением...

Опкодами (см. Код операции) называется некий промежуточный код, который всё ещё понятен человеку и который выполняется некой исполняющей средой. В случае PHP этой средой является Zend Virtual Machine (она же Zend Engine).

Технология опкодов и виртуальной машины не является чем то уникальным для PHP. Подобный подход использует Java, где опкоды компилируются в их бинарное представление и выполняются Java VM. Исходные коды Java-программ хранятся в файлах с расширением .class (потому что в Java искодники хранятся только в виде классов), а скомпилированные опкоды в файлах с расширением .java. В PHP же исходные коды программ хранятся в файлах с расширением .php. А вот опкоды не хранятся нигде, что вызвало к жизни многочисленные расширения, самым популярным из которых на сегодняшний день является OPcache.

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

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

Читать далее

Из боли в удобство: обёртка для расписания пар в колледже (сайт, ВК-бот и SMS)

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров911

Или как я доставлял расписание студентам в новом формате решая несколько проблем, используя парсинг и PHP 7 в 2017-2021 годах.

Читать далее

HTTP/2 / HTTP/3 и gRPC на Rust: пишем учебный Mini-Transport

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров2.3K

Статья-практикум показывает, как устроены HTTP/2, HTTP/3 (QUIC) и gRPC на самом низком уровне. Вместо толстых библиотек мы пишем минимальный учебный фреймворк «Mini-Transport» на Rust (~600 строк): реализуем кодек HTTP/2-фреймов, упрощённый gRPC-протокол и базовую обёртку над QUIC. В результате получаем рабочий echo-клиент и сервер, которые пересылают «hello ↔ world» через собственноручно собранные фреймы. Разбор сопровождается поясняющими схемами, ссылками на RFC, вариантами дальнейшего развития (HPACK, flow-control, TLS/ALPN) и готовым репозиторием для самостоятельных экспериментов. Материал рассчитан на разработчиков, желающих понять «как всё крутится под капотом» и прокачать навыки низкоуровневой сетевой работы в Rust.

Читать далее