Pull to refresh
3
0

Веб

Send message

Фильтры: смерть регуляркам и правильная валидация

Reading time2 min
Reach and readers26K
Фильтры данных впервые появились в PHP 5.0, и по какому-то стечению обстоятельств остались незамечеными большй частью кодеров. Наверное, это можно объяснить отсутствием чего-нибудь подобного в PHP4, а может просто мануал плохо читали. Я тоже узнал про них случайно… А ведь эта замечательная функция позволяет избавиться от запутаных, и подчас некорректных, регулярных выражений, при выполнении типичных задач.
Мануал по фильтрам находится здесь. Приведу только основную информацию и пару практичных примеров.
Читать дальше →

Скорость работы с utf, очевидное, но малоизвестное для новичков

Reading time3 min
Reach and readers4.1K
Сейчас почти в каждой статье упоминается, что надо использовать только utf, потому что это современно, универсально и вообще очень полезно. Ни в коей мере не отрицая этот факт, хотелось бы высказать недоумение тем авторам, которые одновременно с этим говорят скорости работы скриптов, аппелируя к тому, что лучше писать ++i чем i++, по причине скорости работы.

Итак сюрприз — работа с utf медленнее чем с cp1251. Потому что больше размер и нет «выравнивания» букв по байтам. Речь идет о php/mysql

если для Вас это правда сюрприз - читать дальше

Антивирус Бабушкина

Reading time1 min
Reach and readers466K


Молодой студент-третьекурсник из АлтГТУ разработал компьютерную антивирусную программу под названием “Иммунитет”. По словам АП, эту программу сейчас устанавливают в некоторых школах Барнаула. На данный момент продано уже более тысячи копий этого антивируса! В основном ее устанавливают на персональных компьютерах, но уже приобрели несколько школ и компаний краевого центра.
Читать дальше →

7 вещей, которые разработчик должен знать о SQL Server

Reading time5 min
Reach and readers114K
Привет. Я бывший разработчик, ставший администратором баз данных, и ниже написал о том, что, в своё время, хотел бы услышать сам.

7. Производительность скалярных UDF оставляет желать лучшего

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

Посмотрите этот пост о принудительном использовании параллелизма – в частности, список того, что приводит к генерации «однопоточного» плана выполнения запроса. Скорее всего, использование скалярных UDF (прим. переводчика: а для серверов младше 2008 R2 и не только скалярных) приведёт к тому, что ваш запрос будет выполняться в одном потоке (*грустно вздыхает*).
Читать дальше →

Почему стоит пользоваться PDO для работы с базой данных

Reading time9 min
Reach and readers337K

Перевод статьи Why you Should be using PHP’s PDO for Database Access.

Множество PHP-разработчиков привыкли использовать для работы с базами данных расширения mysql и mysqli. Но с версии 5.1 в PHP существует более удобный способ — PHP Data Objects. Этот класс, сокращенно именуемый PDO, предоставляет методы для работы с объектами и prepared statements, которые заметно повысят вашу продуктивность!

Введение в PDO


«PDO – PHP Data Objects – это прослойка, которая предлагает универсальный способ работы с несколькими базами данных.»

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

Эта статья написана для людей, которые пользуются mysql и mysqli, чтобы помочь им в переходе на более мощный и гибкий PDO.
Читать дальше →

PHP класс для удобной и безопасной работы с MySQL

Reading time9 min
Reach and readers118K
После написания статьи про защиту от инъекций я взялся за написание класса, реализующего изложенные в ней идеи.
А точнее, поскольку ключевой функционал уже использовался в рамках рабочего фремворка, я занялся выделением его в самостоятельный класс. Пользуясь случаем, хочу поблагодарить участников PHPClub-а за помощь в исправлении нескольких критических ошибок и полезные замечания. Ниже я постараюсь описать основные особенности, но сначала небольшой
дисклеймер
Есть несколько способов работы с SQL — можно использовать квери-билдер, можно ORM, можно работать с чистым SQL. Я избрал последний вариант, потому что мне он ближе. Я совсем не считаю первые два плохими. Просто лично мне всегда было тесно в их рамках. Но я ни в коем случае не утверждаю, что мой вариант лучше. Это просто ещё один вариант. Который можно использовать, в том числе, и при написании ORM-а. В любом случае, я считаю, что наличие безопасного способа работать с чистым SQL не может принести какой-либо вред. Но при этом, возможно, поможет последним оставшимся приверженцам использования mysql_* в коде приложения, отказаться, наконец, от этой порочной практики.

В двух словах, класс строится вокруг набора функций-хелперов, позволяющих выполнять большинство операций с БД в одну строку, обеспечивая при этом (в отличие от стандартных API) полную защиту от SQL инъекций, реализованную с помощью расширенного набора плейсхолдеров, защищающих любые типы данных, которые могут попадать запрос.
В основу класса положены три базовых принципа:
  1. 100% защита от SQL инъекций
  2. При этом защита очень удобная в применении, делающая код короче, а не длиннее
  3. Универсальность, портабельность и простота освоения

Остановлюсь чуть подробнее на каждом из пунктов.
Читать дальше →

Защита от SQL-инъекций в PHP и MySQL

Reading time26 min
Reach and readers266K
К своему удивлению, я не нашёл на Хабре исчерпывающей статьи на тему защиты от инъекций. Поэтому решил написать свою.

Несколько пространный дисклеймер, не имеющий прямого отношения к вопросу
Давайте признаем факт: количество статей (и комментариев) на тему защиты от SQL-инъекций, появившихся на Хабре в последнее время, говорит нам о том, что поляна далеко не так хорошо истоптана, как полагают некоторые. Причём повторение одних и тех же ошибок наводит на мысль, что некоторые заблуждения слишком устойчивы, и требуется не просто перечисление стандартных техник, а подробное объяснение — как они работают и в каких случаях должны применяться (а в каких — нет).

Статья получилась довольно длинной — в ней собраны результаты исследований за несколько лет — но самую важную информацию я постараюсь компактно изложить в самом начале, а более подробные рассуждения и иллюстрации, а так же различные курьёзы и любопытные факты привести в конце. Также я постараюсь окончательно развеять множественные заблуждения и суеверия, связанные с темой защиты от инъекций.

Я не буду пытаться изображать полиглота и писать рекомендации для всех БД и языков разом. Достаточное количество опыта у меня есть только в веб-разработке, на связке PHP/MySQL. Поэтому все практические примеры и рекомендации будут даваться для этих технологий. Тем не менее, изложенные ниже теоретические принципы применимы, разумеется, для любых других языков и СУБД.

Сразу отвечу на стандартное замечание про ORM, Active record и прочие query builders: во-первых, все эти прекрасные инструменты рождаются не по мановению волшебной палочки из пены морской, а пишутся программистами, используя всё тот же грешный SQL. Во-вторых, будем реалистами: перечисленные технологии — хорошо, но на практике сырой SQL постоянно встречается нам в работе — будь то legacy code или развесистый JOIN, который транслировать в ORM — себе дороже. Так что не будем прятать голову в песок и делать вид, что проблемы нет.

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

Ещё только начав интересоваться темой защиты от инъекций, я всегда хотел сформулировать набор правил, который был бы одновременно исчерпывающим и компактным. Со временем мне это удалось:

Правила, соблюдение которых гарантирует нас от инъекций


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

Всего два пункта.
Разумеется, практическая реализация этих правил нуждается в более подробном освещении.
Но у этого списка есть большое достоинство — он точный и исчерпывающий. В отличие от укоренившихся в массовом сознании правил «прогонять пользовательский ввод через mysql_real_escape_string» или «всегда использовать подготовленные выражения», мой набор правил не является катастрофическим заблуждением (как первое) или неполным (как второе).

Но вперёд, читатель — перейдём уже к подробному разбору.
Читать дальше →

Делаем скриншоты сайтов

Reading time3 min
Reach and readers17K
Бродя по просторам PHP документации случайно наткнулся на две функции: imagegrabwindow и imagegrabscreen. Они умеют делать скриншоты в Microsoft Windows.
Заинтересовало. Кончилось дело тем, что был написан скриптик генерирующий полный скриншот любого сайта.
Итак нам необходимы:

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

Расширение файла средствами PHP

Reading time2 min
Reach and readers104K
Получить расширение файла — не самая сложная задача. Но подходов к ее решению может быть несколько. Давайте попробуем рассмотреть несколько возможных вариантов и понять принципы их работы.

Считаете, что вопрос пустяковый и все тут просто как 2 пальца? Может быть, только недавно мне встретилась занятная бредострочка с толстенным регулярным выражением и все для того, что бы просто получить несколько символов в конце строки после последней точки. Зачем? Итак, начнем с пяти наиболее распространенных способов. Без использования регулярных выражений (только не подумайте, что я считаю их злом). Писать буду как просто и доступно, это не научная статья, а авторская заметка.
Поехали?

Никогда не отвлекай программиста

Reading time2 min
Reach and readers244K
Во многих компаниях программистам запрещают работать в наушниках или отвлекают их по мелким вопросам. Вероятно, причина кроется в плохой информированности менеджеров и других сотрудников, насколько вредно так делать.

Крис Парнин (Chris Parnin) из технологического института Джорджии решил восполнить этот недостаток и опубликовал чрезвычайно насыщенную статью со ссылками на различные исследования по этой теме.

Для начала, несколько фактов, которые относятся ко всем работникам интеллектуального труда. Задача, прерванная по ходу выполнения, занимает в два раза больше времени и содержит вдвое больше ошибок, чем та же задача, которая выполнялась без прерывания (Czerwinski:04). Офисные сотрудники вынуждены отвлекаться при выполнении 57% задач (Mark:05). Опросы говорят о том, что сотруднику требуется в среднем 15 минут, чтобы вернуться в нормальный ритм после того, как его отвлекли (vanSolingen:98).
Читать дальше →

10 отличных приемов с .htaccess для WordPress

Reading time4 min
Reach and readers33K
Внимание!
Перед изменением файла .htaccess не забудьте сделать его резервную копию.


1 — Перенаправляем WordPress RSS поток на feedburner с использованием .htaccess
Почему некоторые вебмастера не используют feedburner? Ведь это такой замечательный инструмент для контроля за подписками на RSS. Проблема в том, что приходится руками исправлять файлы шаблонов. Этот прием поможет сохранить Ваше время.
И не забудьте исправить в строке 6 на Ваш код

<IfModule mod_rewrite.c>
 RewriteEngine on
 RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
 RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
 RewriteRule ^feed/?([_0-9a-z-]+)?/?$ httр://feeds2.feedburner.com/wordpress[R=302,NC,L]
</IfModule>


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

Лучшее в мире PHP за 2012 и дайджест интересных материалов за последние две недели №7 (15.12.2012 — 28.12.2012)

Reading time6 min
Reach and readers29K


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

Приятного чтения!
Читать дальше →

CSS хаки

Reading time4 min
Reach and readers127K
Браузеры и стандарты. Вечная погоня. Из-за несоответствий стандартам, из-за разных способов рендеринга страниц большая часть времени веб-дизайнера уходит на то, чтобы загладить эти несоответствия (использовать хаки). В итоге, вместо эффективной работы, дизайнер вступает в противоестественные отношения с браузерами, теряя драгоценное время.
Читать дальше →

Пишем бота для Twitter на основе GitHub API

Reading time5 min
Reach and readers22K
Доброго времени суток, уважаемое Хабрасообщество.

Сегодня пятница, а это значит, что можно отвлечься от серьезных проектов и отдохнуть. Например, прочитав очередную статью для начинающих, посвященную разработке простого twitter-бота на python, уведомляющего о нескольких видах GitHub-активности.

Если вы подозреваете, что ничего нового из этой статьи не узнаете, то можете просто посмотреть код проекта на GitHub. Остальных же приглашаю под кат, чтобы узнать больше про библиотеки для взаимодействия с GitHub API v3 и ознакомиться с процессом написания бота.



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

Письмо дизайнера — верстальщикам

Reading time3 min
Reach and readers44K
После прочтения очередной статьи и комментариев к ней, я в который раз убедился, что слово «дизайнер» для программистов является синонимом доброй половине словоформ «Большого словаря русского забористого мата».

На просторах сего сайта, в виду специфической аудитории ресурса, часто любят выражать своё негодование по отношению к методам работы начинающих «дизайнеров». Но нужно понимать, что частая встреча с непрофессиональным уровнем работы обусловлена низкой стоимостью выбираемых для сотрудничества дизайнеров и чуть более чем полным отсутствием общения между дизайнером и технарём (желанием «и рыбку съесть и на люстре покататься»).

Тот дизайнер, который ценит своё время, любит порядок в работе, разукрашивает папки и обзывает слои вменяемыми именами, а иногда даже оставляет «сноски в фотошопе в трудных для понимания местах» мгновенно переходит на следующий уровень с соответствующим ценником. И даже если финансы позволяют вам воспользоваться их услугами – их очень не просто найти, так-как соотношение между «дизайнерами-новичками» и «дизайнерами-со-скиллом-именования-слоёв» стремится к 80% — 20% или даже 90% — 10%.

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

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

Встраиваем Sypex Dumper в свою админку

Reading time4 min
Reach and readers19K
Многие популярные CMS, как с открытым исходным кодом, так и коммерческие, имеют в своем составе модули бэкапа. Но проблема в том, что чаще всего эти модули делаются по остаточному принципу, и весьма примитивны, не учитывают многих тонкостей создания дампа. Также чаще всего эти модули банально никто не тестируют на большие объемы (прогнали его на тестовой полупустой БД и рады).

В отличии от подобных модулей, Sypex Dumper является скриптом заточенным исключительно на бэкап и восстановление MySQL. И без проблем работающий с базами даже в несколько гигабайт. Но, кроме того, что дампер работает, как отдельное приложение, в нем была предусмотрена возможность встраивать его в сторонний софт.

В данной статье я расскажу, как быстро и довольно просто встроить Sypex Dumper в административную панель своей CMS (форума, блога и т.п.). А также рассмотрим некоторые недокументированные возможности такой интеграции.
Читать дальше →

CSS спрайты: основные техники и полезные инструменты

Reading time3 min
Reach and readers247K
Использование CSS-спрайтов на сайте позволяет повысить производительность и грамотно организовать элементы интерфейса.



Sprite Sheet — это одно большое изображение мелких графических элементов сайта, например иконок или кнопок. И благодаря CSS можно отображать каждый элемент отдельно.
Читать дальше →

Тюнинг MySQL — thread_cache_size

Reading time1 min
Reach and readers60K
Параметр thread_cache_size играет немаловажную роль в производительности нагруженного MySQL-сервера. В некоторых случаях можно увеличить производительность на 30-50%.

Этот параметр указывает количество тредов, уходящих в кеш при отключении клиента. При новом подключении тред используется из кеша, что позволяет экономить ресурсы при больших нагрузках.
Читать дальше →

Защищённая флешка за 350 рублей своими руками

Reading time3 min
Reach and readers179K
Всем доброго времени суток. Как-то раз у меня появилась идея купить флешку, с которой не будет страшно лезть ни в огонь ни в воду, ни стираться с ней в стиральной машинке. Нашёл в интернете штуки и за тысячу рублей и за две. Денег мало, жаба задушила, пришлось что-то выдумывать.

Сразу скажу, что из инструментов у меня только паяльная станция, хотя по-хорошему хватит и обыкновенного советского паяльника. И ёще, под катом много фоток!
Читать дальше →

Phalcon — скомпилированный PHP MVC Framework

Reading time7 min
Reach and readers56K

Создание скомпилированных MVC фреймворков для PHP не раз приходила на ум кодерам.

Достоинства такого подхода:
  • Высокая производительность
  • Малая нагрузка файловой системы
  • Меньший расход памяти (при строгой типизированности)
  • Частичная обработка данных без интерпритации

И само собой не менее явные недостатки:
  • Если Вы не знаете C, то Вы полностью зависите от разработчиков
  • Проект может в любую секунду сдуться
  • В зависимости от архитектуры, часть модулей все равно приходится писать самому, что уменьшает выигрыш

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

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity