Обновить
128K+

PHP *

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

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

Inline-тесты для PHP

Время на прочтение2 мин
Охват и читатели3.6K
Inline-тесты — это тесты, встроенные непосредственно в DOC-комментарии тестируемого скрипта. Такая фишка, насколько я знаю, есть в Python, хотя внятного описания найти не смог. В любом случае, идея мне понравилась, так как inline-тесты имеют ряд преимуществ по сравнению с обычными, которые я изложу ниже. Поэтому хочу предложить Вашему вниманию инструмент для запуска таких тестов для PHP.
Читать дальше →

Стоит ли смотреть в сторону PHP тому, кто решился только со второй попытки научиться прилично программировать?

Время на прочтение5 мин
Охват и читатели33K
Здравствуйте, друзья. С большой осторожностью касаюсь столь холиварной темы, но хочу рассказать свою небольшую историю о том, почему я, будучи уже далеко не в студенческом возрасте, решил всё-таки изучать программирование, и от чего же я собираюсь (о, боже) использовать для реализации своих намерений PHP. Буду рад получить от вас, коллеги по IT-индустрии, ценные советы и наставления.

Забегая вперёд скажу, что в комментариях к топику (кроме холиваров о языках) сказано много полезного. За что огромное спасибо хабровчанам.
Читать дальше →

Карринг и Частичное применение функции в PHP

Время на прочтение1 мин
Охват и читатели2K
Что такой карринг и частичное применение функции можно прочитать вот в этой статье.

Собственно вот реализация на PHP: github.com/Elfet/Functional

Пример использования частичного применения:
Читать дальше →

DEVCONF 2012 — 9-10 июня в Москве. Началось голосование за доклады

Время на прочтение1 мин
Охват и читатели3.8K
imageКоллеги! Началось традиционное голосование за доклады DEVCONF 2012!
Всего была подана 61 заявка.
  • Общая секция — 18
  • php — 16
  • js — 8
  • ruby — 6
  • python — 4
  • perl — 1
  • Мастер-классы — 7
Скажи ДА! Интересным и полезным докладам на DevConf 2012.

Простой сканер внедрения кода на PHP

Время на прочтение4 мин
Охват и читатели8.1K
Современные хакеры редко “дефейсят” взломанные сайты, как правило, внедряют сторонний код в скрипты для осуществления дальнейших зловредных действий.

Как часто вы тратили часы, выискивая код, внедрённый в ваши скрипты, после атаки?

Некоторое время назад меня привлекли к администрированию десяти сайтов, расположенных на одном виртуальном хостинге. Сайты крутились на “полуразложившихся” движках, написанных в 2000-2003 годах. Сайты постоянно падали под натиском “скрипт-кидди” и изобиловали внедрёнными “зловредами”. Мои задачи были тривиальны: поддержать работу сайтов, перенести на новые движки или залатать дыры в старых движках.

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

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

Aleph PHP Framework

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

Итак, встречайте Aleph!


Новый микро-фрэймворк на PHP, по размеру и функционалу, которого уместно сравнение разве что только с медицинским скальпелем.

По умолчанию содержит всё необходимое для быстрого старта и написания приложений.

Причины, почему стоит обратить на него внимание:
  • Фрэймворк реально маленький. Обильно сдобренный phpDoc комментариями код занимает около 3000 строк;
  • Фреймворк является результатом более чем 6-ти летней профессиональной деятельности его авторов в области web-разработок;
  • Возможности фрэймворка позволяют использовать его как базу под практически любое приложение.

Причём Aleph — это пока что только ядро полноценного фреймворка, уже готового и давно используемого в реальных web-приложениях. Публикация остальных частей системы не за горами — вы просто влюбитесь в возможность проектировать и реализовывать приложения так, как если бы вы делали это в десктопном программировании (не надо пытаться представить это прям сейчас и тут же критиковать, дождитесь пока не увидите это своими глазами, и поймёте, что я имел в виду). Есть и ORM, и система контролов (именно контролов, типа тех, что в ASP.Net), валидаторы, кэширование, шаблонизация и всё то, что делает набор вспомогательных библиотек фреймворком.
Читать дальше →

Что нам стоит фильм «построить»?

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

Преамбула


В процессе работы, анализировал лог, который представлял из себя print_r массива (очень большого массива).
Крутить ролик, пальцы устали. Решил воспользоваться «ускоренным» скроллингом… и…

Кинематограф


Так как массив был многомерным и его второй уровень имел статичное количество элементов, я увидел «кино».
Это были мелькающие значения массива, которые складывались в кадры. Небольшие операции по регулировке скорости прокрутки, и кадры зафиксировались.
Читать дальше →

Codeception — новости проекта

Время на прочтение3 мин
Охват и читатели5.3K
imageЯ уже писал на Хабре о Codeception — фреймворке для тестирования приложений на PHP. Если вы никогда раньше не писали тестов для вашего приложения, вам обязательно стоит взглянуть на Codeception. Он очень прост в использовании и сделан специально, чтобы уберечь разработчиков от рутины.

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

Реализация шаблона Identity Map в Yii Framework

Время на прочтение3 мин
Охват и читатели8.5K
Доброго времени суток, хабрасообщество!

Проблема


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

Например, допустим, у нас есть некоторая модель ActiveRecord — Expence и вот такой код:
$modelOne = Expence::model()->findByPk(10);
$modelTwo = Expence::model()->findByPk(10);
var_dump($modelOne === $modelTwo); // Вернет false

Таким образом, меняя одну модель мы никоим образом не затронем вторую(что логично, так как они ссылаются на разные объекты).
$modelOne->someField = "Data";
$modelOne->save();
/// ...какой-то код...
echo $modelTwo->someField; // Содержит старое значение
$modelTwo->save(); // Затираем ранее записаные данные

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

Борьба с WordPress-червём GetMama

Время на прочтение2 мин
Охват и читатели2.3K
Привет!
Подлый вирус GetMama пожрал кучу сайтов на вордпрессе. В том числе несколько моих. И я вам расскажу, как это почистивать сущность в виде гномика.

Началось с того, что некоторые сайты начали открываться очень долго. Причём только те, что на вордпрессе.
Я долго не мог понять, что же за беда приключилась. Обновил полностью всё ПО на сервере (думал, можнт wp какую-нибудь хитрую срань использует). Но это не помогло.
Тогда я стал искать, какая же функция выполняется так, сука, долго.
Для этого я использовал xhprof.
Читать дальше →

Уязвимость PHP в режиме CGI

Время на прочтение2 мин
Охват и читатели11K
Существует уязвимость на некоторых настройках основанных на CGI (на Apache + mod_php и Nginx + PHP-FPM не влияет), которая оставалась не замеченной, по крайней мере 8 лет. В 7 разделе спецификации CGI говорится:
Некоторые системы поддерживают метод для передачи [sic] массив строк в CGI скрипт. Используется только в случае «индексных» запросов. Определяется «GET» или «HEAD» HTTP-запрос со строкой поиска URL не содержащей незакодированных "=" символов.

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

Точное определение региона по GPS координатам

Время на прочтение4 мин
Охват и читатели23K
При разработке одного приложения возникла проблема разграничения доступа для регионов.

Встала проблема определения принадлежности объекта к какому-либо региону России по его GPS координатам

Первое, что мы начали использовать — это API Google,
после того как прописали алиасы к возвращаемым строкам и оплаты доступа (чтобы убрать лимит на запросы) все заработало.
И все было нормально пока гугл не сменил выдачу, например было раньше: Moskovskaya oblast', стало Moscow oblast'
Тут то и было решено не надеяться на гугл, а определять регион своими силами.


как мы решили эту задачу

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

CMS DLE + uLogin. Ошибки модуля

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

Введение.


Месяц назад, когда работал с DLE и модулем uLogin заметил, что в модуле подозрительно простая проверка входящих данных и решил это проверить.

Мои подозрения подтвердились.
Читать дальше →

Фильтрация и проверка данных PHP. Частые ошибки

Время на прочтение6 мин
Охват и читатели189K
Материал предназначен в основном для начинающих веб-программистов.

Введение.


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

Здесь я постараюсь описать как можно подробнее частые ошибки при фильтрации данных в PHP скрипте и дать простые советы как правильно выполнить фильтрацию данных.

В сети много статей по поводу фильтрации данных, но они как правильно не полные и без подробные примеров.
Читать дальше →

«Сервис свободных аккаунтов» за день с Next Code

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

Начнём с идеи


Например, вы зашли на сайт в поисках чего-либо. Доступ к контенту ограничен. Есть два варианта: зарегистрироваться или поискать тот же контент на другом сайте. Велика вероятность, что данный сайт вам больше не пригодится, и захламлять свою почту спамом, да и просто делать какие-то лишние действия (регистрация, подтверждение) мало кому захочется. В таком случае, вы вводите адрес сайта в сервисе, и смотрите, есть ли свободные аккаунты для данного сайта. Свободным аккаунтом может быть любой логин и пароль, который другой пользователь посчитал не нужным, и решил поделиться им с другими, дабы сократить их время.
Идея сайта родилась в процессе трудового дня. На разработку потребовался один рабочий день. Мотивация – желание доказать что есть люди, готовые помогать другим пользователям интернета бесплатно, и подобного рода проекты могут жить.
Сервис создавался с помощью all-in-one фреймворка Next Code. Кому интересно как — добро пожаловать под кат.
Читать дальше →

Эмулятор PEAR DB средствами PDO с некоторым расширением функционала или простая надстройка над PDO

Время на прочтение3 мин
Охват и читатели1.5K
Доброе время суток всем!
Как обещал ранее, а также по просьбе некоторых пользователей хабра выкладываю в сеть новый вариант эмулятора PEAR DB сделанный на основе PDO и успешно работающий с новыми версиями PHP. Скачать можно здесь (из раздела Code, ветка trunk) или здесь, а также используя snv
так: svn checkout svn://svn.code.sf.net/p/peardb2pdo/code/trunk peardb2pdo-code
или так: svn checkout svn.code.sf.net/p/peardb2pdo/code/trunk peardb2pdo-code

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

Лицензия: GNU General Public License .

Далее подробнее…
Читать дальше →

Вышли PHP 5.4.1 и PHP 5.3.11

Время на прочтение1 мин
Охват и читатели1.6K
Вышли в свет новые версии php 5.3.x и 5.4.x веток.
В обновлении весь уклон направили на безопасность и стабильность,
исправлено ~ 77 ошибок (исправьте если неправильно посчитал).

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

Symfony 2: Полезные библиотеки и бандлы

Время на прочтение9 мин
Охват и читатели54K
Уже около полугода для разработки веб-проектов используем Symfony 2. Накопился список полезных библиотек и бандлов, не входящих в состав symfony-standard, но значительно экономящих время и избавляющих от изобретения велосипеда.



Обзор больше теоретический и включает следующие разделы:
  • Админгенераторы
  • Пользователи
  • Импорт/экспорт xls
  • API и OAuth 2.0
  • Меню/навигация
  • Мультимедиа
  • Формы
  • Поиск
  • Пагинация
  • Файловая система
  • HTTP клиент

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

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