Обновить
128K+

PHP *

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

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

Синглтоны версии 5.3 в 5.2

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

Задача


В общем, сложилась такая ситуация, что на предоставленном для проекта хостинге, версия PHP была 5.2, а сам проект написан под 5.3. Наверняка все, кто работает с PHP, знают, что в версии 5.3 появилась возможность доступа к имени класса, полученного с помощью позднего статического связывания.
Читать дальше →

Борьба с одновременным перестроением кеша с помощью RED

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

Описание проблемы


Представим среднестатистический высоконагруженный сайт. Обычно на таких сайтах между backend'ом и DB ставят прослойку кеша. С увеличением количества посетителей, вероятность того, что несколько пользователей одновременно наткнутся на "протухший" кеш увеличивается. Если такое случается, то нагрузка на backend и DB возрастает, что в свою очередь увеличивает время обработки запроса и увеличивает вероятность возникновения подобной ситуации. Вот такая вот система с положительной обратной связью:Маленькие красные горбики — это "затупившие" на множественном обновлении кеша запросы. Эта статья будет описывать один из подходов к решению проблемы на примере(patch attached) связки PHP/APC, однако теоретическая база применима к любому языку и системе кеширования.
Читать дальше →

Разработка модульного движка на PHP

Время на прочтение5 мин
Охват и читатели9.1K
Есть много разных движков на PHP, от достаточно простых, до очень тяжеловесных и громоздих, включающих практически все.

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

Вышел PhpStorm 3.0

Время на прочтение1 мин
Охват и читатели4.2K
Доступна для загрузки новая версия PhpStorm — среды разработки для PHP от компании JetBrains. Закачка идет быстро и нас здесь хорошо знают — так что буду краток.

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

  • Анализ кода и поиск дубликатов помогут вам найти потенциальные ошибки и код низкого качества, рефакторинг — безопасно улучшить его
  • Диаграммы классов UML помогут охватить взглядом структуру проекта и семантическое представлений изменений — локальных или из VCS
  • Просмотр результатов профилирования c помощью Xdebug и Zend Debugger
  • Поддержка PhpUnit 3.6 и всех опций командной строки
  • CoffeeScript
  • Рекурсивная синхронизация папок и гибкая настройка исключений FTP/SFTP
  • Microsoft TFS, граф ревизий для git
  • Новый интерфейс для всех операционных систем

Подробности и картинки

Уже скоро: релиз WebStorm 3.0 — поддержка Node.JS, JSLint и JSTestDriver

Работайте с удовольствием!

P.S. Ошибки — в трекер, вопросы — в форум, работа над 3.0.1 уже идет!

Решение проблемы авторизации на форумах phpBB 3.0.X через Loginza

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

Loginza – это система идентификации, обеспечивающая единый доступ к популярным WEB-сервисам. Используя учетную запись Loginza Вы сможете посещать большое количество сайтов блогов и форумов, поддерживающих вход OpenID и виджет Loginza, — а это значит не нужно проходить однотипную регистрацию на каждом ресурсе и следить за актуальностью контактной и иной информации профиля на каждом из сайтов.

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

Простой способ передачи табличных данных из PHP в Excel

Время на прочтение3 мин
Охват и читатели44K
К написанию данного топика меня подтолкнула одна заметка о генерации xls в PHP.
Способ, представленный в той заметке действительно очень прост, но не всегда может быть удобен.
Есть множество других способов передать табличные данные из PHP в Excel, я опишу тот, который показался мне наиболее простым и функциональным. Нужно особенно отметить, что что я не говорю о генерации xls файла, а лишь предлагаю пользователю открыть полученные данные при помощи Excel так, что пользователи не искушённые в программировании не заметят подлога.
Читать дальше →

Интеграция JavaScript cookies в CURL-запросы

Время на прочтение10 мин
Охват и читатели26K
В этой статье я расскажу об одной необычной проблеме, с которой мне однажды пришлось столкнуться по роду своей деятельности. Внимание: эта статья не для начинающих. Предполагается, что читатель уже имеет опыт веб-программирования и знаком с языком PHP, библиотекой CURL и основами HTTP.

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

Самый простой способ генерации xls в PHP

Время на прочтение2 мин
Охват и читатели60K
Вообще казалось бы вынесенная в заголовок задача не должно быть сложной, да и гугл дает кучу ссылок, в том числе на хабр, однако для того чтобы сделать выгрузку БД с сайта в эксель мне пришлось несколько помучаться.

С модулем Spreadsheet_Excel_Writer я предпочел не связываться, по причине отсутствия необходимых ему модулей php на трех имеющихся у меня в наличии для тестирования серверах, хочется все-таки сделать код перетаскиваемый между серверами легко и просто.
php_write_excel оттолкнул полным отсутствием документации при необходимости сделать работу быстро (хотя в дальнейшем я хочу с этим модулем поразбираться).
Читать дальше →

Странный $_FILES или «проблема использования синтаксиса массива в полях формы типа файл»

Время на прочтение3 мин
Охват и читатели17K
Меня всегда мучал вопрос по поводу того, почему так устроен массив $_FILES в PHP, точнее то, почему он очень странным образом формирует его. В случае, если имена полей формы оформлены с использованием синтаксиса массива, $_REQUEST, $_GET или $_POST будут содержать правильное представление, но… такое использование не подходит для $_FILES!
Решаем проблему под катом

Ищем неиспользуемые расширения PHP

Время на прочтение1 мин
Охват и читатели2.2K
image

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

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

Волшебный кэширующий декоратор

Время на прочтение3 мин
Охват и читатели5K
Сейчас работаю над доработкой/переписыванием проекта, который был написан, ну скажем так, «не совсем грамотно». По ходу есть задача оптимизировать работу, т.к. код изначально был написан крайне неоптимально. Среди работ по оптимизации прикручивается кэш.

В проекте есть несколько разных источников данных, результаты работы которых хорошо было бы кэшировать, основной — конечно БД. Хотелось решения прозрачного, с минимальной кровью. В один прекрасный момент надоедает писать конструкции вида

$query = "Select something";
$result = $cache->get($query, $tag);
if (!$result) {
    $result = $db->queryAll($query);
    $cache->set($query, $tag);
}

И хочется чего-то другого. Конечно, код можно вынести в отдельную функцию или метод, но это как-то скучно и к тому же, для каждого разного вызова (а там есть не только $db->queryAll, а несколько разных вариантов) нужен будет свой код и своя функция/метод.

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

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

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

Функция конвертации stdClass в SimpleXml

Время на прочтение2 мин
Охват и читатели4.1K
Для одного личного проекта (да и давно просто хотелось попробовать) решил использовать в качестве шаблонизатора — XSLT. Все вроде бы чудесно: для xsl-преобразований требуется объект SimpleXml, из базы возвращается тоже объект, казалось бы в чем проблема, почему нельзя передавать объект из базы напрямую в шаблонизатор?

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

Внедряем namespace в существующий php-код

Время на прочтение3 мин
Охват и читатели2.7K
Увидел статью о namespace и решил поделиться опытом перевода существующих проектов на namespace.
В основном статья будет полезна тем, кто еще не использует namespace, но задумывается над переписыванием существующего кода.

Я переводил на namespace несколько своих проектов, которые были взаимосвязаны между собой. Проекты не слишком большие и весь переход я сделал за выходные.

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

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

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

PHP Namespace

Время на прочтение6 мин
Охват и читатели114K
Недавно инкапсулировал свой проект в namespace и столкнулся с проблемой отсутствия нормальной документации. Все, что удалось найти датируется примерно 2009 годом, а на дворе почти 2012… В найденном материале куча нерабочих мест, использующих то, что в нынешней версии php нет. В связи с этим хочу немного осветить этот вопрос.
Читать дальше →

Ввод в программу иерархического списка

Время на прочтение7 мин
Охват и читатели4.3K
Появилась задача — вводить в web-приложение элементы иерархического списка (например КЛАДР).

Когда работал с drupal, видел там модуль Hierarchical Select, реализующий эту функциональность.
Но хотелось сделать самому — для того, чтоб не привязываться к системам, которые мне полностью не понятны и вообще, интересно.

Поиск готового решения, не завязанного на какую-то существующую систему, дал что-то вроде
этого, что не устроило.

Топик не претендует на новизну и особую сложность исполнения.
Сделал за 2 часа.
Захотел поделится.
Возможно, кому-то пригодится.
Максимально все документировал и функции, описывающие источник данных, вынес в 2 метода:
— поиск детей (один уровень) по родителю
— поиск всех родителей ребенка по иерархии вверх
чтобы желающие могли использовать это для своих нужд.

Возможно, что-то подобное где-то и было, но быстро я это не нашел.
Итак, приступим.
Читать дальше →

Русский перевод официальной документации PHP снова стал доступным!

Время на прочтение3 мин
Охват и читатели4.8K
Добрый день, Хабрасообщество!

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

Прогресс сообщества PHPDoc-RU


С 1 августа и по 12 ноября объем переведенной документации вырос в 4 раза и составил более чем четвертую часть общего количества файлов и больше трети от их объема.



Подробности под катом (Графика: ~ 65Кб).
Читать дальше →

Отладка PHP приложений на удаленном хосте при помощи XDebug и vim в Linux

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

Введение


В PHP приложениях отладка при помощи var_dump, debug_backtrace и прочих полезных функций не всегда удобна, и возникает потребность в полноценном отладчике. Эта статья — для тех, кто по каким-либо причинам не хочет использовать IDE, поддерживающие отладку PHP приложений из коробки, вроде NetBeans или PhpStorm, а хочет использовать для этих целей vim, и при этом отладка происходит на удаленном хосте.
Читать дальше →

Защита от сохрания изображений

Время на прочтение3 мин
Охват и читатели14K
image
Здравствуйте, уважаемые харбрачитатели.
Некоторое время назад я столкнулся с очень, на мой взгляд, интересной задачей. Суть задачи заключалась в том, что необходимо максимально усложнить процесс сохранения картинок со страниц сайта. При этом картинки могут быть разных размеров.

Задача ясна, приступим к её решению. В общем случае процесс сохранения картинки достаточно прост: кликаем по ней правой кнопкой мышки и в открывшемся меню выбираем «Сохранить изображение…» (в разных браузерах надпись может отличаться). Перехват нажатия правой кнопки мышки частично решит эту задачу, но обход данного ограничения до безобразия прост – отключаем JavaScript и спокойно вызываем контекстное меню. В этом случае достаточно картинку сделать фоновым изображением:
Читать дальше →