Обновить
66.97

PHP *

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

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

GOTO

Время на прочтение1 мин
Количество просмотров8.9K
Оказывается у создателей документации по PHP есть чувство юмора. Случайно наткнулся на иллюстрацию для одного из операторов в PHP 5.3. Оригинал под катом.

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

Действительно умные сессии и авторизация

Время на прочтение3 мин
Количество просмотров11K
Добрый день. Увидев статейку на тему «умных сессий», я решил поделиться действительно умной схемой, которая по всем параметрам превосходит предложенную.

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

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

Визуальный PHP-рефлектор

Время на прочтение1 мин
Количество просмотров1.4K
image
Представляю вниманию общественности визуальный PHP-рефлектор.

Скрипт индексирует все .php-файлы в указанной директории, кэширует информацию о найденных классах. Разбор .php файлов осуществляется с помощью Tokenizer. Кэшируются имена найденных классов, кэшируется сопоставление имя файла — класс для последующего использования в автолоадере.

Список классов представляется в виде дерева. Для каждого класса доступен список методов, свойств. Доступен просмотре базового класса и имплементированных интерфейсов. Данные о «составе» классов получаются на ходу через PHP reflection API. Данные подгружаются через AJAX.

Интерфейс выполнен на ExtJS. Этим обусловлена поддержка браузеров — работает в IE6+, FF1.5+, Safari 3+, Opera 9+ (PC, Mac)


Посмотреть PHPReflector в действии.
UPD: Исходники

В исходниках отсутствует Ext
Теперь Ext с минимальным набором компонентов подгружается из внешних источников через CDN (CacheFly)

Планы на будущее:
  • Причесать исходники;
  • Сделать поиск;
  • Сделать отображение не только базовых классов, но и классов, наследованных от данного;
  • Отображение DocBlock'ов для классов, методов, свойств
  • UPD: Добавить отображение штатных классов PHP

Умные сессии

Время на прочтение2 мин
Количество просмотров3.8K
Решаем проблемы производительности.

Исходные данные.
Транслируем футбольные матчи через интернет. Посетителей: в обычные дни 5 000 — 10 000, в дни матчей 100 000 — 150 000.

В дата-центре
  • 5 веб-серверов с апачем и ПХП, наружу вывешены через аппаратный балансировщик загрузки
  • 2 пула мемкеша: для сессий и данных из веб-сервисов

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

Zend Studio for Eclipse 7.0 EA

Время на прочтение1 мин
Количество просмотров924
image
Данная версия является ранним пререлизом, целью которого является сбор баг репортов, пробуем на свой страх и риск.
Читать дальше →

Превентивная защита ваших и не ваших скриптов

Время на прочтение1 мин
Количество просмотров30K
Наверное не ошибусь если скажу, что очень большая часть мегахакерских_взломов основаны на закачке PHP-скрипта в каталог, доступный для записи в него файлов скриптами (0777, например). Это каталоги для заливки фотографий товаров, аватарок и т.п.

Я еще несколько лет назад «допер» до способа предотвратить на корню подобные вещи. Закачать — может и закачают, а воспользоваться не смогут. Это казалось очевидным все это время, но мало кто это реализовывает. К примеру, только в последнем патче популярного форума SMF была добавлена подобная штука.
Поэтому, для тех, кто не задумывался…

Всё просто. Во все каталоги, доступные для записи, закачиваем (или добавляем строчки к существующему) .htaccess с содержимым:

php_flag engine 0
AddType "text/html" .php .cgi .pl .fcgi .fpl .phtml .shtml .php2 .php3 .php4 .php5 .asp .jsp

Этим самым мы отключаем PHP в данном каталоге и заставляем все скрипты отображаться как HTML.
Это можно сделать просто на всякий случай. Лишним уж точно не будет.
Разумеется, только для Apache. Если кто-то знает как подобное реализовать в IIS — напишите. :)

PHPUnit и его Database Extension. Беглый взгляд

Время на прочтение7 мин
Количество просмотров7.3K

Пространное и многословное вступление


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

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

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

С днем рождения, PHP!

Время на прочтение1 мин
Количество просмотров2.7K
phpВ 1994 году Расмус Лердорф (Rasmus Lerdorf) создал набор скриптов на Perl/CGI для обработки шаблонов html файлов своего онлайн-резюме. Но когда функционала и скорости Perl перестало хватать, Расмус переписал интерпретатор на C, назвав его PHP/FI (Personal Home Page / Forms Interpreter).

8 июня 1995 года, 14 лет назад, вышел PHP/FI 2.0 — первый публичный релиз.

В общем, поздравляю, PHP! Меньше глюков, больше секурности и ООП-а в головах новичков!

allow_url_fopen на виртуальном хостинге: добро или зло?

Время на прочтение1 мин
Количество просмотров21K
Приветствую всех!
Держу сайты на двух разных виртуальных хостингах (не VPS, а shared hosting). Сайты на лёгких CMS с открытым кодом. Когда количество сайтов превысило количество пальцев, решил сделать так, чтобы сайты сами апдейтились. Для автоапдейта необходимы опции: cURL включён, safe_mode выключен, open_basedir выключен, allow_url_fopen включён. И столкнулся с тем, что один хостер «из соображений безопасности» не даёт включить в моём php.ini опцию allow_url_fopen. Другой хостер даёт и автоапдейт работает. На вопрос отвечает, конечно же: наплюй и неси все сайты ко мне – у нас всё чётко.
Не знаю, кому из них верить (в рнр настолько не разбираюсь). Более того, предполагаю околорелигиозную тематику. Поэтому: прошу вашего мнения. И, пожалуйста, не холиварьте;)
ап> суть вопроса: включённый allow_url_fopen это дыра или нет, если да, как эффективно закрывается и почему первый хостер предпочитает не позволять, чем закрывать дыру.

Обратимое шифрование текста — метод «Двойной квадрат»

Время на прочтение5 мин
Количество просмотров50K
Здравствуйте!

Однажды, мне понадобилось шифровать текст. Я знал что в PHP есть расширение mcrypt, но интуиция подсказывала, что не на всех хостингах это включено.
Поэтому я начал подозревать что придется кодить решение самому. Что я собственно и сделал. Получилась функция обратимого шифрования, достаточно быстрая и надежная.
Пример работы функции:
<?php 
	echo dsCrypt('habrahabr.ru');
	//Выведет: 60634K7T0*0!
	echo dsCrypt('60634K7T0*0!',1);
	//Выведет: habrahabr.ru
?>

Если вы все еще пользуетесь XOR шифрованием :), то можете заглянуть под кат и посмотреть как еще можно защищать данные…
Читать дальше →

Это же кошмар, товарищи. PHPShop

Время на прочтение2 мин
Количество просмотров8K
Оговорюсь. Не имею никакого отношения к PHPShop, не конкурирую с ней и не ставлю целью кого-то заклеймить.

К нам обратился человек, купивший Enterprise-версию интернет-магазина PHPShop (2.1) и сделавший на ней сайт. Ему нужна некоторая доработка бизнес-логики магазина, за которую авторы запросили непомерную сумму. Мы получили код и начали смотреть.

Это жуть. Я так писал первые 2 дня знакомства с php и вебом вообще. Студентам с таким кодом не принимаю лабы.
Читать дальше →

Как стать Zend PHP 5 Certified Engineer

Время на прочтение3 мин
Количество просмотров27K
Свершилось, ура! Теперь я имею почетный статус ZCE :)

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

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

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

Нюансы сериализации

Время на прочтение1 мин
Количество просмотров2.5K
Думаю многим известны «магические» методы __sleep и __wakeup для управления сериализацией объектов.

Казалось бы все просто:
__sleep вызывается перед сериализацией чтоб можно было убрать ненужные связи (бд, мемкэш и тд).
__wakeup вызывается после unserialize, чтоб можно было автоматом необходимые связи вернуть в зад.

Но есть нюанс. Причем я сталкивался с ним раза 4 за последние 5 лет работы.
Читать дальше →

Smarty в управляемой представлениями модели

Время на прочтение4 мин
Количество просмотров2.9K
Обычно шаблонизатор Smarty применяется так: вы пишете код, который создаёт набор данных для шаблона, отдаёте вместе с названием шаблона смарти и тот «соединяет бренды», выводя в браузер результат.

Это так называемая модель с ведущими контроллерами. То есть контроллер полностью отвечает за то, что получил шаблонизатор и вообще командует всем.

Ещё есть модель с ведущими представлениями. В ней представление говорит контроллеру «а дай-ка мне, дорогой друг, список последних постов», после чего контроллер дёргает модель, добывает этот список, обрабатывает и отдаёт представлению (в нашем случае — шаблонизатору).

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

PHP мануал

Время на прочтение1 мин
Количество просмотров3.7K
image

Каждый PHP-программист пользуется справочной информацией. Кто-то привык работать с документацией на официальном сайте. Кто-то постоянно стирает пальцами до дыр учебник или справочник по PHP. Некоторым хватает Гугла.

А вот я привык к руководству в формате .chm. А привычка — дело сложное.

Когда мне пришлось перейти на разработку под Линуксом, я так и не смог пересесть за мануал с официального сайта PHP. Ставил кучу каких-то программ-читалок этого вебхелп-формата. Одна не показывала русские буквы, вторая падала на каждом первом chm-файле, третья не могла читать оглавление, n-ная и вовсе не запускалась. Поэтому я решил действовать согласно золотому правилу, что сделать надо что-то самому для себя, а не ждать у моря погоды.

Если вы, как и я, привыкли к chm-руководству, то разрешите поделиться с вами вот этой ссылкой. Это веб-вариант справки.

Пользуйтесь на здоровье.

p.s. Сразу предупреждаю, что я знать не знаю, как сайт выглядит в Internet Explorer, так как под Windows я не работаю да и пост мой посвящён соответствующим людям. Сильно не придирайтесь, пожалуйста, делал не на продажу.

phpThread: нити в PHP? Запросто

Время на прочтение2 мин
Количество просмотров2.2K
Если вы хотите научиться писать многопоточные приложения на PHP или здорово упростить себе жизнь — статья для вас.

Раньше для этих целей я пользовался либо запуском несколько копий скрипта, либо же использовал pcntl на более низком уровне, чем хотелось бы. Это, а от части и Java-идеология работы с потоками, побудили меня к написанию пакета phpThread.
Читать дальше →

PHP 5.3: обзор

Время на прочтение3 мин
Количество просмотров8.9K
Дни идут чередой, погода улучшается, а между тем PHP 5.3 всё ближе и ближе — надо быть во всеоружии.
Недавно вышел RC2, затем будет RC3, а затем Stable (примерно через месяц).
Читать дальше →

Паттерн MVC: из 1970-х в 2009 год

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров8.8K
В современной разработке последних лет набирает большую популярность шаблон проектирования MVC (Model-View-Controller). В наши дни, в 2009 году, это уже стандарт, который, думаю сохранится надолго.

Предлагаю исследовать, что вкладывали в этот подход его разработчики в далеких 70-80-х годах и как он применяется сейчас.
Читать дальше →

SOAP, генерация прокси класса

Время на прочтение2 мин
Количество просмотров6.7K
Преамбула:

SOAP — протокол обмена структурированными сообщениями в распределённой вычислительной среде. Первоначально SOAP предназначался, в основном, для реализации удалённого вызова процедур (RPC), а название было аббревиатурой: Simple Object Access Protocol — простой протокол доступа к объектам. Сейчас протокол используется для обмена произвольными сообщениями в формате XML, а не только для вызова процедур. Официальная спецификация последней версии 1.2 протокола никак не расшифровывает название SOAP. SOAP является расширением протокола XML-RPC.


Итак, делаем proxy-class
Читать дальше →