Записи с меткой "кодинг"


Как работать с XDebug

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

Вечная аутентификация на сайте

Постановка задачи: я хочу, чтобы юзер всегда был залогинен, пока сам не выйдет. И не надо ему предлагать "Запомнить меня", это тупо, имхо. Если юзер хочет, чтоб его забыли, пусть жмет "Выход".

При этом защита не должна ослабевать, типа выдал один раз секретный код и всё, пока юзер не свалит, пользуется. Код должен обновляться, но прозрачно для юзера. Так же должна быть возможность отлучить юзера от доступа в зону по причине отобранной роли, бана или вообще, подозрении в хакерском взломе аккаунта.

PHP: парсинг и замена "short_open_tag"

Речь о тегах в php-скриптах. Согласно мануала при включенной опции разрешается короткая форма записи <? ?> тегов PHP. Если такая запись запрещена, то препроцессор PHP парсит только <?=...?>, что на самом деле не относится к коротким php-тегам, а является сокращенной записью инструкции <?php echo ...?>

Суть моей проблемы: перешел на новую версию PHP, при этом ставил его не из официальных репов, а в полуручном режиме из PPA. В новом конфиге опция short_open_tag оказалась отключена, у меня упало несколько сайтов и я подзаколебался искать причину. Учитывая, как я обновил PHP, мест для возможных багов стало более, чем достаточно.

Метки: PHP, кодинг

PHP сессия в базе данных

Хочу организовать хранение сессий на стороне сервера в базе данных. Зачем? "Just for fun!" ©. Вы можете найти для себя другие причины :)

Оказалось, свой велосипед не нужен, в PHP уже все есть. Нужно реализовать интерфейс php::SessionHandlerInterface и где-то назначить сессионным обработчиком объект моего класса. Для этого вызываем функцию php::session_set_save_handler(). Проще всего сделать вызов в bootstrap.php или index.php приложения.

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 3: углубление в PHPUnit

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

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 2: знакомство с PHPUnit

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

Метки: PHP, кодинг

Unit-тестирование в PHP. Часть 1: теория

Данная статья (все ее части) - это лекция о модульном тестировании, которую мне нужно было провести среди PHP-разрабочиков компании, на которую я сейчас работаю.

Я не гуру тестирования и статья не претендует на полное руководство по модульным тестам или использованию PHPUnit. По первому вопросу целые книги пишут, да и у PHPUnit есть нормальный мануал. Цель статьи - объяснить на пальцах, как создавать unit-тесты, помочь разобраться с нуля в этой теме. Я подразумеваю ваше дальшнейшее самообразование. используя эту статью, как отправную точку.

Метки: PHP, кодинг

PHPUnit. Тестирование исключений

PHPUnit 5.6, метод expectException(), а так же директива @expectedException используются в тестах для указания ядру фреймворка "ожидать такое-то исключение". В итоге тест считается пройденным если исключение возникло.

И тут есть ньюансик: после того, как PHPUnit поймает ожидаемое исключение, выполнение тест-метода прекратится! Т.е. expectException() - это аналог assert-метода, только с прерыванием. Есть так же методы на проверку кода и сообщения исключения.

Метки: PHP, кодинг

ООП расширение класса php::Exception

В связи в повсеместным использованием ООП в PHP потребовалось запилить класс исключения с удобными плюшками. Их две: из экземпляра OOPException можно получить имя класса и метода, пробросившего исключение. Это удобно использовать в дополнение к Exception::getFile(), Exception::getLine().

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

Метки: PHP, кодинг

vQmod - зло! Применять в минимальных дозах

Есть такая веб-разработка - vQmod. Помню, как радовался такой полезной и удобной системе, когда только с ней познакомился и разобрался в деталях, как она работает. А потом стал находить "деготь в этой бочке меда", но было терпимо.. до текущего момента. Теперь же я считаю, что vQmod - зло, причем немалое. Погодите потрясать кулаками, давайте обсудим :)

Супервалидация пользовательских данных

Задача: обработать данные с формы обратной связи. А там полей штук 30(!), это форма запроса кредита. Решение в лоб - разбирать массив и валидировать каждое значение, - это жесть. Выход в использовании возможностей php-функций filter_*_array(). Там много заморочек, я более-менее разобрался с этим семейством. Пищу здесь, чтоб в следующий раз не шариться в исходниках.

MODx Evo: ошибки установки плагина transAlias

Скачал плагин TransliterateAlias v1.0 с оф.сайта MODx. Получил какой-то невнятный архивчик под именем repo-2340.zip Несмотря на странное имя, внутри все же оказался именно каталог [transalias]. Но это только начало.

Метки: MODx, кодинг

Создание сайта. Часть 7: PHP

Полное содержание серии - в конце статьи.

Когда-то давно я услышал от знакомого кодера фразу "PHP – легкий язык программирования". В то время я отнесся к этим словам скептически, но теперь полностью согласен. Этот язык гораздо легче изучить, чем многие другие, потому что, в первую очередь, он ограничен в возможностях. Это неплохо, просто от заточен под определенные функции и отлично справляется с ними. Грубо говоря от него требуется только собирать текст.

Вторым агрументом является документированность и популярность PHP. В инете чуть больше, чем дофига толковой информации по теме. Если вы ничего не знаете о создании кода, то начать именно с PHP – удачный выбор. И начать знакомство рекомендую в Викидепии.

Создание сайта. Часть 6: JavaScript

Очередная статья серии, посвященной сайтострою. Полное содержание серии - в конце статьи.

Теперь начинается реальный кодинг. Можно конечно отказаться от использования JavaScript на своих сайтах, тем более что браузеры по-разному понимают js-код (тут бардак не меньше, чем в дизайне). Но возможности, которые он дает, заставляют хотя бы попробовать с ним разобраться.

Выпадающее многоуровневое меню. CSS + javascript

Теоретическая задача: на Javascript создать единый код для обработки многоуровневых меню, выпадающих в любом направлении (слева/справа или снизу/сверху). Т.е. решить не частную задачу, а общий случай. Вообще задача изначально носила практический характер. Нужно было прикрутить менюшку к одному коммерческому проекту, причем времени на разработку не было. Пошарился в инете, найденные решения меня не устроили. Либо заточены под один вид меню, либо ограничения по уровням. Нашел даже совсем экзотический вариант, на дли-и-и-инном css-управлении. Все-таки пришлось делать свое, универсальное.

Ассемблер. Начало

В который раз пытаюсь освоить ассемблер и не знаю, на сколько меня хватит. Какими путями я опять пришел к нему, не буду рассказывать. Скажу просто - "надо" :) Вооружившись Гуглем и отбрасывая все, что на данный момент мне не нужно, принял за старт архив рассылки О. Калашникова "Ассемблер? Это просто! Учимся программировать (2001)". Есть еще одноименная книга, но мне пока достаточно chm-файла с выдержками из нее. Внимание! В этом архиве рассылка неполная! За продолжением нужно лезь на соответствующие сайты.

Метки: asm, кодинг

Сброс параметров запуска Access

Получил заказ: нужно переделать отчет в готовом проекте Access. Вроде бы ничего сложного, но разработчик через параметры запуска проекта скрыл все менюшки и окно базы данных. Т.о. добраться до исходников невозможно.. почти. Немного погуглив нашел старый vbs-скрипт, качующий с сайта на сайт. Чтобы больше не искать, размещаю его здесь. Может пригодится еще.

Метки: MS Office, кодинг

"Правильный" multi_curl в PHP

Мне нужно было разобраться, как именно работают функции curl_multi_*, представленные в PHP, почему так разнятся примеры не только в инете, но даже в справке PHP, что на самом деле происходит. CURL в PHP - это инкапсуляция настоящих функций библиотеки и еще некоторых других. При этом PHP использует не все функции libcurl, да и справка оставляет желать лучшего. Дабы не тыкать вслепую пимпы на клаве, перебирая варианты чужого кода, я решил постичь истинный смысл функций мульти-cURL и их параметров.

Метки: PHP, кодинг

Неблокирующее чтение текстового файла

На работе возникла практическая задача: в логе прокси-сервера найди записи по фильтру. Лог - это обычный текстовый файл, так что наиболее простое программное решение - читать его построчно через pascal-функции Reset() и Readln(). Накидал программку, обкатал ее на копии файла, все прекрасно. Но такую прогу нельзя применить к текущему логу, т.к. функция Reset() блокирует файл на запись. Решением стало применение функций WinAPI для чтения файла. В итоге у меня получился аналог функций Паскаля для построчного чтения файла через WinAPI.

Метки: Delphi, кодинг

Откуда в PChar "мусор"

Неудачное сочетание двух функций в Delphi 7 стоило мне нескольких часов жизни и много нервов. Зато мне удалось наконец поймать непредсказуемый PChar за хвост. Я и раньше сталкивался с необъяснимыми косяками, корнями идущими из бардака в pchar-переменных. Но сколько я об этом ни читал, сколько не копался - смысл не доходил. Теперь же я на 90% уверен, что точно знаю, чего ожидать от этого типа.

Метки: Delphi, кодинг
Первая<12>Последняя
Продвижение
Время
Метки
Щелкни мышей, чтобы закрыть