Обновить
128K+

PHP *

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

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

Улучшения в htmlspecialchars() в версии 5.4

Время на прочтение4 мин
Охват и читатели22K
Вокруг новых фич в PHP 5.4 было много разговоров, как например про traits, короткий синтаксис массивов.

Но одни особенно важные изменения, которые часто забывают для PHP 5.4, героически переписал cataphract (Artefacto на StackOverflow) большую часть htmlspecialchars.

Изменения о которых идет речь, относятся не только к htmlspecialchars, но еще и к htmlentities, htmlspecialchars_decode, html_entity_decode, get_html_translation_table.

Вот краткий обзор наиболее важных изменений:
  • UTF-8 кодировка по-умолчанию
  • Улучшенная обработка ошибок (ENT_SUBSTITUTE)
  • Обработка Doctype (ENT_HTML401, …)


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

Автоматическое оповещение читателей о новостях с помощью ВКонтакте. Часть 4

Время на прочтение2 мин
Охват и читатели15K
На хабре уже было несколько статей о работе с вконтактом (раз, два, три), однако оно производилось через простые запросы на страницы с последующим ее парсингом. Это ужасно неправильно, так как если верстка страницы либо порядок запросов поменяется — скрипт перестанет работать. Кроме того, если не ошибаюсь, это запрещено правилами сайта.
Для этого есть официальный API от вконтакте.

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

Компоновщик стратегий или объединение Composite+Strategy

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

Сегодня я хочу вам показать результат взаимодействия двух широкоро распространенных паттернов проектирования Strategy и Composite, в результате чего у нас получится так называемый «Компоновщик стратегий».
Узнать подробности

Unit-тестирование в Codeception

Время на прочтение4 мин
Охват и читатели16K
Неделю назад я уже писал о Codeception и об его использования для тестирования PHP приложений. После прошлого поста несколько багов было исправлено. Спасибо за багрепорты. Если вы ещё не пробовали Codeception, советую посмотреть прошлую статью и испытать его для приемочных тестов.

Сегодня я хочу рассказать, как в Codeception реализовано юнит-тестирование в BDD-стиле.

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

Не очень честная генерация DOC файлов на PHP

Время на прочтение3 мин
Охват и читатели17K
У каждой задачи есть несколько вариантов решения. И иногда в угоду скорости приходится выбирать не самый красивый, зато работающий и выполняющий поставленные перед ним цели. Итак, в один не очень прекрасный день возникла необходимость реализовать следующую функцию: у каждой (почти) страницы сайта должны быть автоматически сгенерированные копии в форматах DOC и PDF. С сохранением всех таблиц и картинок внутри контента. И если с PDF всё относительно просто (tcpdf наш друг и брат), то с DOC'ом возникла морока. Под катом — пример решения данной задачи.
Читать дальше →

Универсальный класс автозагрузки

Время на прочтение3 мин
Охват и читатели19K
Прочитав этот хабратопик. Решил поделиться своим классом автозагрузчика (вдруг кому пригодится), который умеет рекурсивно искать нужные файлы, не только классы, но и любой другой, переданный ему файл, ну и если там где указано файл не найден, то производит поиск по всему серверу начиная от корня, если файл найден где-то не там, генерит соответствующее сообщение, умеет работать с пространством имен и логировать свои действия в случае необходимости.
Читать дальше →

Подводный камень в foreach($items as &$item)

Время на прочтение2 мин
Охват и читатели78K
Многие любят писать такие конструкции в том или ином виде, каждый сталкивался:
foreach ($items as &$item) {
    $item += 2;
}

Но не многие подозревают о том, какая опасность тут скрывается.
Рассмотрим пример.
Читать дальше →

Яндекс.ТвояПогода

Время на прочтение2 мин
Охват и читатели95K
Привет! Очень давно уже не писал никаких статей, да и вообще, долго уже раздумывал опубликовывать данную тему или нет, но всё же решился.

«Для чего»

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

Решения, предлагаемые, многими сервисами погоды являются относительно громоздкими и, по моему мнению, не очень приятными глазу :) Хотелось бы сделать что-то своё)

Мне приятнее всего пользоваться сервисами Яндекса, поэтому поставил перед собой вопрос «как сделать свою Яндекс.Погоду?» :)
Читать дальше →

Что нового в PHP 5.4

Время на прочтение3 мин
Охват и читатели33K
Всем привет! Судя по слухам, 19 января, в свет должен был выйти очередной RC PHP 5.4. Возможно даже, что он будет финальным. А это значит, что нужно скорее заняться изучением новых возможностей.

Я несколько лет профессионально занимаюсь веб-разработкой и в качестве основного серверного языка использую PHP. Так что узнав о выходе столь крупного обновления, я отправился собирать информацию. Под катом shortlist самых значимых нововведений.

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

Универсальное чтение ячеек в PHPExcel

Время на прочтение4 мин
Охват и читатели104K
Привет, Хабр!
Мне по работе часто приходится импортировать Excel-документы средствами PHP.
Для этого я использую библиотеку PHPExcel, которая на сегодняшний день является весьма удобным инструментом.
Но есть несколько «скользких» моментов, связанных с чтением данных из ячеек, о которых я хочу рассказать хабрачитателям, а также разобрать функцию, решающую эти проблемы.
Читать дальше →

Шаблонизация в PHP при помощи лямбда-функций и замыканий

Время на прочтение6 мин
Охват и читатели5.1K
Начиная с php 5.3, мы получили замечательную возможность использовать замыкания и анонимные функции. Они, вместе с альтернативным синтаксисом, очень удобны для использования при шаблонизации (конечно, за исключением случаев, когда верстальщику не надо давать доступ к php), а шаблоны на их основе быстры, легко переводятся в байткод акселератором, могут поддерживать блочное наследование, не требуют компиляции и кеширования, поддерживают скины и очень удобны в разработке.
Предполагается, что читатель имеет опыт работы с шаблонизаторами, например twig. Подробности под катом.
Читать дальше →

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

Codeception — тестирование по-новому

Время на прочтение4 мин
Охват и читатели90K
PHP очень популярный язык программирования, но тестирование в нем, это скорее прерогатива экспертов, а не жизненная необходимость. Неужели это от того, что PHP-разработчики поголовно быдло-кодеры? Я считаю, что нет. Скорее всё от того, что системы тестирования порой излишне усложнены. А тесты, наоборот, должны были предельно просты: легко читаться, писаться, отлаживаться, и конечно же, быстро выполняться. Мое виденье того как это можно воплотить в PHP вылилось в проект под названием Codeception.

С ним тесты для ваших веб-приложений могут выглядеть так:
<?php
$I = new TestGuy($scenario);
$I->wantTo('create new blog post');
$I->amOnPage('/blog/posts');
$I->click('Create new post');
$I->fillField('Title','Codeception, a new way of testing!');
$I->fillField('Text','Codeception is new PHP full-stack testing framework.');
$I->click('Send');
$I->see('Congratulations, your post is successfully created!');


Согласитесь, такой тест понятен без дополнительных комментариев.
А теперь самое интересное: этот код без всяких изменений может быть выполнен как функциональный тест в фреймворках symfony, Symfony2,Zend Framework, а также в браузерном эмуляторе Goutte и даже через Selenium. Таким образом, вам предлагается единый интерфейс для написания функциональных тестов практически для любого сайта.
Читать дальше →

DesignPatterns, шаблон Interpreter

Время на прочтение5 мин
Охват и читатели20K
Компиляторы и интерпретаторы языков, как правило, пишутся на других языках(по крайней мере так было сначала). Например PhP был написан на языке С. Как вы догадались на языке PhP можно определить, спроектировать и написать свой компилятор своего языка. Конечно язык который бы создадим будет медленно работать и будет ограничен, тем не менее он может быть очень полезным.
Читать дальше →

Закрываем зеркало сайта от индексации правильно

Время на прочтение4 мин
Охват и читатели7.5K
Здравствуй, %habrauser%.
Сегодня я покажу как не надо закрывать от индексации зеркало сайта, и как закрыть его правильно.

Предыстория

Я работаю web-мастером в одной крупной для нашего города компании.
Мы сделали клиенту сайт, для рекламирования и продажи своей продукции.
Клиент выбрал доменное имя в зоне .RU, и сайт около года успешно работал. Сайт по настоящее время обслуживается и редактируется по мере необходимости у нас.
Через какое-то время клиент захотел второй домен для сайта, но в зоне .РФ.
Он самостоятельно нашёл «профессиональных seo-специалистов продвигальщиков», сайт которых стоял на первом месте в выдаче Яндекса по определенным запросам.
С ними он заключил договор, и ежемесячно отгружал немалую сумму денег в эту seo-конторку.
Спустя пару недель сеошники наконец проснулись, связались с нами и получили ftp доступы к сайту, а так же пароль от админки сайта.

Началась «оптимизация»

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

Backup Time Machine своими руками

Время на прочтение3 мин
Охват и читатели5.3K
Как не крути, а в новогодние праздники, риск порчи файлов значительно возрастает. Не миновала сия беда и меня. Как не трудно догадаться, я перепутал диск при форматировании и… да-да, все что было нажито неправедным путем непосильным трудом, в один момент было уничтожено.

Помянув сборник софта и архив отсканированных справочников, я задумался над вопросом бекапов. И… Пришел к выводу, что того что мне в самом деле требуется, нет. Точнее конечно же есть, но либо стоит дорого, либо работает не так, как мне бы того хотелось.
Читать дальше →

Пишем свой блог с фреймворком Fat-Free Framework

Время на прочтение8 мин
Охват и читатели24K
На всякий случай — это перевод (многие не замечают этого в интерефейсе ХабраХабра).
«Fat-Free» можно перевести с английского как «Обезжиренный» — фреймворк и в самом деле поражает своим размером (55 КБ) и скоростью работы.


Я наконец-то нашёл лёгкий и быстрый фреймворк. Он умещается в файл размером всего 55Кб и имеет множество возможностей, о которых вы можете узнать на его официальном сайте, поэтому не буду повторяться. Вместо этого я решил сделать небольшой учебник, из которого вы узнаете как сделать свой блог на этом фреймворке.
Вам понадобится PHP 5.3 на сервере. Я использовал Ubuntu 11.04 для написания этого учебника, на которую легко устанавливается эта версия. Если вы работаете на RHEL или Centos то я предлагаю заглянуть вам на IUS Community Project для получения последней версии PHP.
Читать дальше →

Красивый вывод изображений

Время на прочтение3 мин
Охват и читатели47K
image
Всегда мне не нравилось, как выводятся изображения на моих сайтах. Хотелось какой-то упорядоченности, зависимости. Поэтому, я полез искать скрипты и решения в гугле. После безуспешных поисков, решено было делать что-то самому.
Но что? Я стал смотреть, как сделан вывод картинок у популярных сайтов. Всё мне не нравилось, пока я не додумался посмотреть вывод в google images и google+. Меня поразило то, что я никогда этого не замечал картинки выравниваются по ширине и высоте не обрезаясь. Такой принцип я и захотел реализовать. Получается мозаика. И всё будто на своём месте.
Не долго думая, я сел писать код, который сможет вывести картинки так же.
Читать дальше →