Обновить
128K+

PHP *

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

102,69
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Отладка iframe приложения непосредственно в среде vk.com с использованием php + xdebug

Время на прочтение3 мин
Охват и читатели7.6K

В этой статье вы узнаете, как можно отлаживать iframe приложение непосредственно внутри среды vk.com, то есть как белый человек. Разработка приложения непосредственно в среде не требует создания песочниц (эмуляции вконтакте), очень удобно работать непосредственно с API вконтакте, видя все переменные, которые передаются туда и обратно непосредственно в трейсе. Не претендую на оригинальность, я просто проверил, что такой статьи нету в тырнете и все, а идея очевидна и проста. Идею придумал за кружкой чая, ибо если бы я успел его допить, то начал бы гуглить.
Читать дальше →

MVC Application: Mail

Время на прочтение1 мин
Охват и читатели3.3K
В продолжение к прошлому топику: Файловый менеджер.

1) Интерфейс создавался для работы на планшетном компьютере.
2) Не gmail, потому что нужно хранить сообщения на своих серверах, необходимо работать с любыми доменами, в том числе своими.
3) Одно из преимуществ клиента, созданного на PHP, – его доступность с любого места, где есть интернет.
4) Не roundcube, так как данный почтовый клиент использует библиотеку PHPMailer, поэтому может работать с POP3, IMAP ящиками и отправлять почту по SMTP протоколу.
5) Почтовый клиент, так же как и Файловый менеджер изъят из другого проекта.



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

Yandex Translate API: PHP и небольшое исследование сервиса

Время на прочтение4 мин
Охват и читатели59K
После закрытия Гуглом своих API для перевода проблема поиска онлайн-сервис для машинного перевода стала особенно актуальной.
В Интернете много сервисов перевода с громкими именами: Промт, Прагма и пр. Нет никакой проблемы в PHP смоделировать обращения к страницам сервисов и получить результаты перевода. Но есть проблема: почти все сервисы в ответ на простой GET или POST запрос отдают не результат перевода, а целиком страницу во всей красе, начиная с DTD. Как говорят у нас на Украине, “дурных нэма”.
После анализа было выяснено, что есть только два сервиса, которые отдают в ответ на запрос только результат перевода: Яндекс и Bing от Microsoft.
Читать дальше →

Файловый менеджер на PHP, с правами, контролем версий и AJAX-ом

Время на прочтение2 мин
Охват и читатели26K
Особенности файлового менеджера:
— Можно задавать права доступа на файлы и директории. Права двух типов: есть доступ или нет доступа. Файлы хранятся в недоступной для скачивания по прямой ссылке папке. Скачивание файла происходит с предварительной проверкой пользователя и прав доступа на файл. Любой пользователь файлового менеджера может обладать правами администратора, что указывается при добавлении нового или редактировании существующего пользователя. Администратор может видеть все, в том числе «удалённые» файлы.
— Контроль версий каждого файла. После загрузки файла он сохраняется с именем, которое не позволяет перезаписать существующие файлы, а его «оригинальное» имя сохраняется в БД. Данный подход разрешает хранить разные состояния файлов.
— Автоматическое создание превью загружаемых изображений.
— Файл в менеджере можно сделать доступным для скачивания
— GPL, код доступен на github



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

Разбираем HTTP Range по стандарту

Время на прочтение3 мин
Охват и читатели36K
В одном из проектов мне понадобилось разобрать HTTP Range запрос, чтобы добавить поддержку загрузки файлов по частям. В сети полно различных примеров, но я так и не нашел ни одной полной реализации RFC 2616. Один код не учитывал, что диапазонов может быть несколько, другой, что стандарт допускает запросы больше размера документа, третий не различает синтаксически правильный и недостижимый запрос, как рекомендует стандарт. Поэтому я решил написать свою реализацию и поделиться со всеми. Подробности и пример реализации на PHP под катом.
Читать дальше →

Неочевидное поведение assert

Время на прочтение1 мин
Охват и читатели11K
При написании кода любой программист делает проверки. Это нормально :) Для генерации ошибок в PHP есть три механизма:
  • error (собственно ошибки);
  • exception (исключения);
  • assertion (утверждения).

При написании кода и его последующем тестировании было обнаружено совершенно неочевидное поведение функции assert. А теперь немного кода:
Читать дальше →

Unit-тестирование от начинающего начинающим

Время на прочтение5 мин
Охват и читатели79K
Здравствуйте.

На написание статьи меня сподвигнул этот пост. В нём приведено описание инструментов и некоторая теоретическая информация.

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

PHP 6 не будет, не осилили

Время на прочтение3 мин
Охват и читатели41K
Забавно, но не нашёл на хабре упоминания об этом даже в комментариях. Пора устранить этот недостаток, ведь многие используют только хабр, как источник информации.

Так вот PHP 6 не будет, вообще. 11 марта 2010 команда разработчиков приняла решение об отмене выпуска PHP 6 в текущем его виде. В результате транк с PHP 6 был перенесён в бранч, а в транке образовалась новая версия — 5.4, в которую разработчики перенесли все наработки из PHP 6, кроме юникода.

Ниже приведен краткий пересказ презентации (pdf), сделанной Andrei Zmievski на PHP Community Conference в 2011 году.
Читать дальше →

Легкий способ начать тестировать

Время на прочтение4 мин
Охват и читатели50K
Если вы PHP-разработчик, и по разным обстоятельствам тесты для своих приложений не пишете, то эта статья для вас. В ней я постараюсь вкратце показать с чего начать и что делать, чтобы написание тестов приносило вам радость, а вашему приложению стабильность.

Итак, первый совет. Забудьте всё что вы знаете о юнит-тестах. Швырните табуреткой в человека, который сказал вам, что без них не обойтись. Попробуем разобраться, в каких случаях нужно их использовать, а в каких — нецелесообразно.
Читать дальше →

Создание «API-Centric» Web Application на PHP

Время на прочтение13 мин
Охват и читатели11K
Что такое “API-Centric” Web Application?
Это веб приложение которое большая часть функционала реализуется через API. Например: если вы авторизовываетесь, то вы отправляете свои данные через функции API, а API уже возвращает результат success или же ошибку. Другой характеристикой API является то что API не зависит от состояния пользователя.

Зачем это нужно ?
Как веб разработчики мы видим, что технологии развиваются каждый день. И все знают, что люди используют не только браузеры на pc, но и android, apple, windows phone и прочие гаджеты для доступа в интернет к своим любимым сайтам.

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

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

Бэкдор в PHP-фреймворке Horde

Время на прочтение1 мин
Охват и читатели2K
В веб-приложениях, основанных на open source PHP-фреймворке Horde, обнаружен бэкдор. Расследование показало, что некто изменил три дистрибутива на FTP-сервере для неавторизованного исполнения PHP-кода. Уязвимость зарегистрирована как CVE-2012-0209.

Затронутые дистрибутивы:
  • Horde 3.3.12, скачанный с FTP с 15 ноября по 7 февраля
  • Horde Groupware 1.2.10, скачанный с FTP с 9 ноября по 7 февраля
  • Horde Groupware Webmail Edition 1.2.10, скачанный с FTP со 2 ноября по 7 февраля
Horde 4 не затронут, репозитории на CVS и Github тоже. Проверить свою версию можно с помощью поиска сигнатуры в /path/to/horde:

\$m\[1\](\$m\[2\])

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

Расширяем класс Imagick

Время на прочтение2 мин
Охват и читатели4.7K
Приветствую всех своих первых читателей!

Завязка


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

Началось всё с того, что была задача написать некий класс на php для работы с изображениями. Решил прибегнуть к помощи ImageMagick и к расширению Imagick.
Сам класс Imagick имеет обширное количество методов, однако требовалось расширить его и добавить собственные методы, такие, как проверка существования кеша изображения и получения пути к нему, собственно само кеширование ну и некоторые другие вспомогательные.

Для этих целей был написан нехитрый класс:
<?php
namespace app;
class Images extends \Imagick {
    private $_filePath = null;
    private $_cacheFile = null;

    // переопределенный метод
    public function readImage($filePath) {
        $this->_filePath = $filePath;
        parent::readImage($this->_filePath);
    }
    
    // что-то от себя
    public function myMethod() {

    }

    // дальше идёт продолжение кода...
?>


Теперь давайте разберёмся, почему этот класс работать НЕ будет.
Читать дальше →

Панель инструментов Xdebug для отладки PHP в Opera

Время на прочтение3 мин
Охват и читатели3.6K
Инструкция по настройке тулбара Xdebug — для тех, кто хочет отлаживать код непременно в Опере (а также для тех, кого жизнь заставила).

Панель инструментов Xdebug в Opera

Для отладки в Опере я нашёл три способа:
  1. Букмарклет-генератор от JetBrains. Нажимаете «Generate», перетаскиваете ссылки на свой тулбар и, в зависимости от своих настроек, получаете либо длиннющие кнопки с текстом вроде «xdebug This page» (что занимает слишком много места), либо совершенно одинаковые безымянные кнопки с иконками странички (невозможно использовать).
  2. Плагин для Оперы, упомянутый в документации Xdebug, который добавляет кнопку для переключения отладки. Судя по комментариям, плагин даже не удосуживается установить печенью путь «/».
  3. Вручную добавлять параметры в URL.

Оставшись неудовлетворённым всеми вариантами, пришлось изобретать свой велосипед. С помощью инструкций ниже можно добавить шесть кнопок на тулбар (пять — из букмарклета, одна — Dragonfly).
Читать дальше →

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

Как получить доступ ко всем свойствам объекта, не используя «отражение»

Время на прочтение3 мин
Охват и читатели12K
Для чего получать доступ ко всем свойствам объекта и при этом не менять его интерфейс? Например, для того, чтобы написать свою сериализацию. Или чтобы передать объект в приемлемом виде используя http. Или для чего-нибудь ещё.
Читать дальше →

Определение страны по IP: тестируем скорость алгоритмов

Время на прочтение4 мин
Охват и читатели37K
Для определения страны по IP необходимы специальные базы данных, состоящие из диапазонов IP адресов и соответствующих им стран. Обычно такие базы данных распространяются в виде CSV или SQL файлов для использования в СУБД, либо бинарных файлов специального формата.

Для проведения тестирования была выбрана февральская база GeoLite Country, бесплатная версия GeoIP Country от MaxMind.

В тестировании приняли участие несколько популярных решений и мой «велосипед» на эту тему.
Читать дальше →

Массивы моделей в MVC — вкусно и тяжело?

Время на прочтение5 мин
Охват и читатели5.1K

Парадигма MVC во многом позволяет упростить поддержку кода за счет разделения логики и создания абстракций, однако часто, следуя принципу Thick Model & Thin Controller (он же Fat Model & Skinny Controller), разработчикам приходится упираться в краеугольный камень использования любого объекта-модели, а именно — в потребление памяти. Что особенно актуально при работе с моделями, которые реализуют ORM (или ActiveRecord паттерн).
В данной статье хочу вкратце продемонстрировать стандартные подходы к решению данной проблемы.

Читать подробнее

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

Время на прочтение9 мин
Охват и читатели339K

Перевод статьи 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.
Читать дальше →

Пишем обработчик ошибок для phpredis

Время на прочтение4 мин
Охват и читатели5.2K
Началось все с того, что у нас в компании решили сделать прокси/балансировщик нагрузки который бы, в зависимости от ключа, отправлял запрос на тот или иной инстанс Redis'а. Так как идеально сразу ничего не работает, то написанный на php проект, работающий с редисом(с помощью phpredis) через этот самый балансировщик, с завидной регулярности вылетал с критическими ошибками. Увы прокси не всегда правильно собирал сложные ответы сервера…
Работа с Redis'ом в коде через каждых 10 строк, и оборачивать каждый вызов в try, catch не было ни малейшего желания, но и с постоянными вылетами дебажить было сильно не удобно. Тут мне и пришла в голову идея подменить объект Redis'a своим, изнутри которого я бы уже вызывал все методы настоящего объекта…
Читать дальше →

Мультимагазин. Статья для начинающих веб-программистов

Время на прочтение8 мин
Охват и читатели4.2K
Многие интересные технические решения, возникают в результате решения интересных проблем. А кто придумывает или создает такие проблемы инженерам? Ответ — конечно пользователи. Вот и эта статья как раз рассказывает об одной такой интересной проблеме и ее решении.

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

Теперь рассмотрим проблему глазами инженера, учитывая, что базы товаров Основного и Дополнительного магазина находятся на одном сервере. Количество Дополнительных магазинов нам не известно, но очевидно, что нагрузка на Основной магазин будет большой. Большое количество разного товара не дает нам возможности точно сформировать структуру таблиц с товаром. Свойства товара очень сильно разнятся в зависимости от его категории. Суммируя полученные данные, задача для проектировщика Основного магазина звучит как:

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

Деобфускация PHP кода

Время на прочтение20 мин
Охват и читатели57K
Деобфускация PHP
Так уж случилось, что на днях мне попался один нужный PHP скрипт, но обфусцированный.
По какой-то причине он никак не работал. Я пишу на PHP достаточно давно, и мне очень нравится отлавливать нестандартные ситуации в скриптах, особенно когда при выполнении в логах нет ошибок, а скрипт просто не выполняет своих предназначенных обязанностей, руки так и чесались расшифровать. Последней каплей стало то, что автора этого скрипта не было в сети, чтобы помочь решить мою проблему. Скрипт кстати куплен моим товарищем, собственно он и попросил помочь.

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

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