• Битовые операции в PHP на примерах

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

      Например, встречались такие варианты:
      if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR){…}
      или
      if(in_array($error['type'], array(E_ERROR, E_PARSE,  E_COMPILE_ERROR)) {…}

      В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.
      Читать дальше →
    • Обработка критических ошибок в PHP

        В статье описан функционал, который доступен в PHP (актуально для 5.3.х) для обработки ошибок всех типов, включая ошибки интерпретации кода (E_ERROR, E_PARSE, E_WARNING, etc). Эта обработка поможет вам для управляемого отображения страницы в случае возникновения таких проблем. В статье присутствует множество описаний и рабочих примеров(архитектуры) для того, что бы сразу воспользоваться в своем программном продукте. В конце концов, ну немного сломали сайт, ну надо же, об этом сообщить поисковику с заголовком 4хх или 5хх и повеселить пользователя, вместо возврата белого экрана (или что хуже экрана со священной информацией, для хакеров) с ответом 200 Ok.



        Идея написать этот топик возникла, когда я на храбре задал 2 вопроса:

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

        Если заинтересовались, то подробности под катом…
        Читать дальше →
      • Изменение ширины элемента с «шагом» в несколько пикселей

        Заранее оговорюсь, что чистым CSS здесь, к сожалению, обойтись не получится: Firefox и IE8+ слишком точно (да-да, в данном случае это плохо) производят вычисления ширины блоков. Однако для этих браузеров дописывается нехитрый скриптик в пару строк, если таки надо достичь идеала, хоть это и портит всю прелесть.

        Для тех, кому лень читать всё, ссылка на окончательный вариант: jsfiddle.net/XeFTr/11

        В чем суть?


        Суть в том, что иногда необходимо отобразить на странице резиновый блок с несколькими дочерними элементами, причем потомок должен быть либо виден целиком, либо не виден вообще. Самый простой пример — лента каких-нибудь картинок с прокруткой и стрелочками по бокам. Очень некрасиво смотрится выглядывающее из-под «overflow: hidden» изображение, обрезаннное сбоку. Выход — заставить ширину обёртки всегда быть кратной скольки-то пикселям.
        Разумеется, если ширина потомков разнится от элемента к элементу, то этот способ не имеет смысла.

        Как это работает?


        Принцип работы заключается в том, что большинство браузеров вычисляют ширину потомка, если она задана в процентах, исходя из ширины родителя. Таким образом, если у элемента ширина 1000%, то при изменении ширины его родителя на пиксель сам элемент растянется или сожмётся на 10 пикселей. Собственно, всё.

        Эту штуку описывал в лебедевском скринкасте Сергей Чикуёнок еще в 2008 году, в контексте исправления бага с «прыгающими» блоками в IE6. Однако я, к своему удивлению, так и не нашел описания этой презабавной технологии на Хабре.

        Читать дальше →
      • Каким IDE Вы пользуетесь для разработки PHP приложений?

           

          Only registered users can participate in poll. Log in, please.

          Каким IDE Вы пользуетесь для разработки PHP приложений?

          • 19.4%PhpStorm1183
          • 23.5%Netbeans1434
          • 9.3%Eclipse572
          • 4.6%Zend Studio286
          • 2.4%Aptana PHP150
          • 40.5%Не использую IDE (notepad++, gedit, vim)2471
        • Реалистичные тени при помощи CSS3 без использования изображений

            Привет, Хабр!

            Хочу поделиться замечательным мастер-классом по созданию реалистичных теней для блоков на чистом CSS, найденном на просторах рунета по адресу http://mainview.ru/css/realistichnye-teni-pri-pomoshhi-css3-bez-ispolzovaniya-izobrazhenij. Естественно, для того, чтобы примеры работали как надо, необходим браузер с поддержкой CSS3.

            image

            Читать дальше →
          • Guideman — путеводитель по избранной мужской атрибутике

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

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

              Guideman

              Читать дальше →
            • Traits в php 5.4. Разбираем детали реализации

              • Tutorial
              Совсем недавно вышла первая beta php 5.4, а пока я писал топик подоспела и вторая. Одно из нововведений в 5.4 – это traits (типажи). Предлагаю разобраться во всех деталях в том, что же типажи из себя представляют в php.

              Простой пример типажа, чтобы не заглядывать в Википедею:
              //определение типажа
              trait Pprint 
              {
                  public function whoAmI()
                  {
                      return get_class($this) . ': ' . (string) $this;
                  }
              }
              
              class Human 
              {
                  use Pprint; //подключаем типаж, ключевое слово use
              
                  protected $_name = 'unknown';
                  
                  public function __construct($name)
                  {
                      $this->_name = $name;
                  }
              
                  public function __toString()
                  {
                      return (string) $this->_name;
                  }   
              }
              
              $a = new Human('Nikita');
              echo $a->whoAmI(), PHP_EOL; //=> Human: Nikita
              

              Как видно, к классу Human было добавлено поведение из типажа Pprint.

              Но во всём есть свои детали.
              О них далее
            • Английский для айтишника? Легко!

                Эта тема не относится к IT напрямую, но все знают, что без нее никуда. К сожалению, далеко не у всех есть возможность изучать английский с преподавателями. Ну что ж, попробуем заняться этим дома и с максимальной отдачей!
                Читать дальше →
              • Алгоритм популярности пользователя на сайте — «Нестандартный подход к стандартным вещам»

                Все видели на сайтах систему рейтинга статей и материалов. Многие ее даже делали сами, но не каждый делал рейтинг людей на сайте.
                В этой статье я поведаю как сделать качественную систему рейтинга для пользователей вашего ресурса.
                Читать дальше →
              • Определение кодировки текста в PHP — обзор существующих решений плюс еще один велосипед

                  Столкнулся с задачей — автоопределение кодировки страницы/текста/чего угодно. Задача не нова, и велосипедов понапридумано уже много. В статье небольшой обзор найденного в сети — плюс предложение своего, как мне кажется, достойного решения.

                  1. Почему не mb_detect_encoding() ?


                  Если кратко — он не работает.
                  Подробнее - под катом
                • Единая авторизация пользователей с поддержкой нескольких сервисов

                    Yii EAuth extension При реализации одного из проектов на Yii framework у меня возникла задача сделать регистрацию и авторизацию пользователей через сторонние сервисы (Google, Facebook, Twitter, etc).

                    У данной задачи есть два пути решения:
                    • Использовать сервис авторизации, например Loginza;
                    • Реализовывать функции авторизации самостоятельно для каждого сервиса.
                    UPDATE: Актуальная версия и инструкция по настройке доступны на github.com. Инструкция в данной статье подходит для EAuth версии <= 1.1.3.
                    Я выбрал второй вариант...