Записи с меткой "PHP"
12 мая 2021
|
Речь про сигналы, передваемые в Linux любому процессу: SIGINT, SIGKILL и пр. Эти сигналы доступны только в nix-подобных системах, базовая фича таких ОС. На Windows не будет работать почти наверняка.
Я неправильно понимал, как работает, т.к. зашел не с той стороны. Сейчас разобрался, рассказываю.
Картинка кликабельна. Автор: Daniel Stori — CC BY-NC-SA 4.0
|
25 июня 2019
|
PhpStorm поддерживает "заглушки" для PHP функций - это удобно. Например, в IDE вы можете посмотреть quick doc по php::array_merge() или любой другой из сотен функций PHP. Но эти заглушки лишь частично устанавливаются из коробки.
Так же есть отдельный реп в пространстве JetBrains, который нужно клонировать в кастомный каталог, вручную прикрутить в IDE и следить за его обновлениями, чтобы заглушки работали для некоторых расширений PHP типа Stomp Client.
|
Это крайне странная ситуация, которая нисколько не радует...
3 октября 2017
Речь о тегах в php-скриптах. Согласно мануала при включенной опции разрешается короткая форма записи <? ?> тегов PHP. Если такая запись запрещена, то препроцессор PHP парсит только <?=...?>, что на самом деле не относится к коротким php-тегам, а является сокращенной записью инструкции <?php echo ...?>
Суть моей проблемы: перешел на новую версию PHP, при этом ставил его не из официальных репов, а в полуручном режиме из PPA. В новом конфиге опция short_open_tag оказалась отключена, у меня упало несколько сайтов и я подзаколебался искать причину. Учитывая, как я обновил PHP, мест для возможных багов стало более, чем достаточно.
29 сентября 2017
Хочу организовать хранение сессий на стороне сервера в базе данных. Зачем? "Just for fun!" ©. Вы можете найти для себя другие причины :)
Оказалось, свой велосипед не нужен, в PHP уже все есть. Нужно реализовать интерфейс php::SessionHandlerInterface и где-то назначить сессионным обработчиком объект моего класса. Для этого вызываем функцию php::session_set_save_handler(). Проще всего сделать вызов в bootstrap.php или index.php приложения.
12 июня 2017
Продолжение статьи о модульных тестах в PHP. В этой части рассмотрим поставщики данных, фикстуры, подмену зависимостей, тесты с виртуальной файловой системой, тесты исключений и взаимодействия с базой данных.
12 июня 2017
Продолжение статьи о модульных тестах в PHP. В этой части займемся практикой тестирования и разберемся с базовым использованием PHPUnit.
12 июня 2017
Данная статья (все ее части) - это лекция о модульном тестировании, которую мне нужно было провести среди PHP-разрабочиков компании, на которую я сейчас работаю.
Я не гуру тестирования и статья не претендует на полное руководство по модульным тестам или использованию PHPUnit. По первому вопросу целые книги пишут, да и у PHPUnit есть нормальный мануал. Цель статьи - объяснить на пальцах, как создавать unit-тесты, помочь разобраться с нуля в этой теме. Я подразумеваю ваше дальшнейшее самообразование. используя эту статью, как отправную точку.
11 октября 2016
PHPUnit 5.6, метод expectException(), а так же директива @expectedException используются в тестах для указания ядру фреймворка "ожидать такое-то исключение". В итоге тест считается пройденным если исключение возникло.
И тут есть ньюансик: после того, как PHPUnit поймает ожидаемое исключение, выполнение тест-метода прекратится! Т.е. expectException() - это аналог assert-метода, только с прерыванием. Есть так же методы на проверку кода и сообщения исключения.
19 мая 2016
В связи в повсеместным использованием ООП в PHP потребовалось запилить класс исключения с удобными плюшками. Их две: из экземпляра OOPException можно получить имя класса и метода, пробросившего исключение. Это удобно использовать в дополнение к Exception::getFile(), Exception::getLine().
Без ложки дегтя не обойдется: придется переписывать все свои вызовы исключений, и наплодить наследников от продвинутого класса для замены стандартных LogicException, RuntimeException и т.д.
19 марта 2015
Вот и я наступил на эти грабли.. :( Во-первых, я невнимательно читал мануал. Разница между strlen() и ее мультибайтным аналогом, mb_strlen(), в том, что первая считает байты в строке, а вторая - символы. В однобайтных кодировках разницы нет, но для мультибайтных (например utf-8), значения функций будут разные, если в строке есть буквы национального алфавита. Это меня не парило, пока не столкнулся с багом. На локалке код работает, на сервере падает с кракозяброй в сообщении об ошибке.
13 августа 2014
Есть такая веб-разработка - vQmod. Помню, как радовался такой полезной и удобной системе, когда только с ней познакомился и разобрался в деталях, как она работает. А потом стал находить "деготь в этой бочке меда", но было терпимо.. до текущего момента. Теперь же я считаю, что vQmod - зло, причем немалое. Погодите потрясать кулаками, давайте обсудим :)
20 марта 2014
Задача: обработать данные с формы обратной связи. А там полей штук 30(!), это форма запроса кредита. Решение в лоб - разбирать массив и валидировать каждое значение, - это жесть. Выход в использовании возможностей php-функций filter_*_array(). Там много заморочек, я более-менее разобрался с этим семейством. Пищу здесь, чтоб в следующий раз не шариться в исходниках.
6 августа 2013
Полное содержание серии - в конце статьи.
Когда-то давно я услышал от знакомого кодера фразу "PHP – легкий язык программирования". В то время я отнесся к этим словам скептически, но теперь полностью согласен. Этот язык гораздо легче изучить, чем многие другие, потому что, в первую очередь, он ограничен в возможностях. Это неплохо, просто от заточен под определенные функции и отлично справляется с ними. Грубо говоря от него требуется только собирать текст.
Вторым агрументом является документированность и популярность PHP. В инете чуть больше, чем дофига толковой информации по теме. Если вы ничего не знаете о создании кода, то начать именно с PHP – удачный выбор. И начать знакомство рекомендую в Викидепии.
13 апреля 2012
Мне нужно было разобраться, как именно работают функции curl_multi_*, представленные в PHP, почему так разнятся примеры не только в инете, но даже в справке PHP, что на самом деле происходит. CURL в PHP - это инкапсуляция настоящих функций библиотеки и еще некоторых других. При этом PHP использует не все функции libcurl, да и справка оставляет желать лучшего. Дабы не тыкать вслепую пимпы на клаве, перебирая варианты чужого кода, я решил постичь истинный смысл функций мульти-cURL и их параметров.
17 ноября 2011
Прелесть open-source кода в его открытости :)) Т.е. при наличии ума/времени/желания можно разобраться, как именно работает программа. Обратная сторона такого кода - сложность в получении нужных скомпилированных пакетов. Например, PHP можно скачать в виде исходников для Nix-систем с последующей компиляцией/сборкой. Для Windows все уже собрано, но готовых бинарных пакетов много! Варианты с "thread safe/non thread safe", VC6/VC9 и разные версии самого PHP. Статья создана для прояснения ситуации. В основе - разные источники, частично - перевод с английского. Все для того, чтоб в следующий раз мне опять не разбираться - "че к чему!?".
8 ноября 2011
Речь пойдет о библиотеке cURL (aka Client URL, libcurl) и ее использовании в PHP. Об этом уже много всего написано, поэтому я не буду проводить ликбез. Я расскажу о тех возможностях библиотеки, которые мне особенно доставляют. Не знаю, с какими благими намерениями создавал это чудо Daniel Stenberg, я использую ее в корыстных целях :)
19 сентября 2011
Есть как минимум два языка программирования, способных управлять cookie - PHP и Javascript. Есть множество браузеров, поддерживающих работу с печеньками. И есть проблема: удаление этих самых cookies может выполняться по-разному, в зависимости от языка/браузера. В этой статье я расскажу о своих изысканиях и кроссбраузерном подходе к манипуляциям с cookie.
29 августа 2011
Задача: удалить однострочные/многострочные комментарии, tab-отступы, пустые строки в js-скрипте. Так же нужно учесть, что в коде возможны экранированные back-slash и кавычки. После всего удалить переносы строк, чтобы получится весь код в одной строке. Разбить код на строки заданной длины.
Я не знаю, зачем последнее действие, но все "обфускаторы" так делают =-). Приведенный в статье скрипт я считаю упаковщиком, потому что он уменьшает вес конечного файла, а еще - мне так больше нравится :) Зачем все это нужно, я уже писал здесь. В двух словах: этот скрипт чистит js-файлы для загрузки на сервер.
26 августа 2011
Мои сайты сделаны в кодировке windows-1251, включая БД. Возникла необходимость получить файл в кодировке UTF-8 (собираю dump-файл базы). Как оказалось, преобразование из одной кодировки в другую - задача не тривиальная. В этой статье я попытаюсь разложить по полочкам, что к чему. Поле деятельности: Apache/2.2.15 (Win32) PHP/5.3.5. Во внимание беру только две кодировки, UTF-8 и Windows-1251 (aka cp1251), но многое из сказаного относится к преобразованиям в любых кодовых страницах.
19 августа 2011
Понесло меня по теме времени :). Не нашел, где разместить эту php-функцию, поэтому оформляю, как новую запись. Применение функции: передаем ей UTC-значение времени (timestamp) и нужный часовой пояс (число), получаем timestamp-время в указанном поясе с учетом летнего/зимнего времени.