Рубрика «php» - 127

Часть сотрудников нашей компании работает вне офиса: выезды к клиентам, работа в домашних условиях. Для связи с такими сотрудниками мы используем GSM шлюз, подключенный к нашей АТС Askozia. Любой вызов, поступивший от клиета, может быть переадресован на сотрудника “в поле”.

В таких условиях возникает не удобная ситуация: сотрудник, при входящем вызове видит номер SIM карты, а не номер клиента. Нет возможности оперативно перезвонить на пропущенный вызов.

Мы решили использовать Telegram для оповещения о звонках. Получилась интересная связка программных продуктов Askozia + Telegram + 1C: Предприятие.
Читать полностью »

Доброго времени суток всем.
Неожиданное поведение openssl_random_pseudo_bytes() приводящее к фатальной потере криптостойкости - 1
Недавно в одном из проектов мы столкнулись со следующей проблемой — функция openssl_random_pseudo_bytes() выдавала дублирующиеся псевдослучайные последовательности!

Этого не может быть, потому что этого не может быть никогда! — Скажет любой, кто читал документацию этой функции. И, да, $crypto_strong исправно выдавал TRUE.

И тем не менее — ошибки уникальности при вставке в базу сыпались пачками и лог подтверждал — 32-байтные последовательности генерировались повторно через разные интервалы, от суток до недели. Расследование заняло целый месяц. Сейчас я на 99% уверен, что причина найдена — но буду благодарен, если читатели подтвердят или опровергнут мои выводы.

Читать полностью »

Данный модем не является модемом, как таковым. Это роутер с процессором arm v7 на базе Linux, в системе отображается в виде сетевой карты, без проблем заводится в Линуксе (сетевой интерфейс usb0, подсеть 192.168.0.0).

К устройству можно подключаться по telnet (ip: 192.168.0.1, login: root, password: zte9x15), дальше внедрять свои iptables, вешать скрипты в crontab и многое другое, даже устанавливать собственное по, но сегодня речь не об этом.

Для выполнения операций с модемом необходимо выполнять CGI запросы к веб-интерфейсу, подойдет wget или curl. В модеме от мегафон нет веб-морды, а вот в билайновском есть. Web-морда представляет из себя браузерное JavaScript-приложение, которое отправляет аяксом эти самые CGI запросы, ни каких годных документаций по работе с sms на просторах интернета я найти не смог, поэтому решил залить веб-морду и отловить запросы.

Для работы с SMS нужно отправлять POST-запросы на адрес 192.168.0.1/goform/goform_set_cmd_process

Отправка SMS

goformId=SEND_SMS
notCallback=true
Number=номер абонента
sms_time= дата в формате y;m;d;h;i;s
MessageBody=текст сообщения
ID=-1
encode_type=UNICODE

Удаление SMS

goformId=DELETE_SMS
msg_id=список id сообщений, разделенный точкой с запятой
notCallback=true

Получение SMS
Для получения всех сообщений в формате json, нужно обратиться по адресу
192.168.0.1/goform/goform_get_cmd_process?cmd=sms_data_total&page=0&data_per_page=5000&mem_store=1&tags=10&order_by=order+by+id+desc
в ответ мы получим массив всех SMS в формате JSON.

C удалением sms всё просто, а вот с получением и отправкой следующая беда — каждый символ кодируется HEX-кодом UTF, получаем код символа функцией ord(), переводим то что получилось в 16-ричную систему счисления и добиваем нулями до 4х сиволов, для обратной раскодировки сообщений делим текст по 4 символа, переводим в 10-ричную систему счисления и получаем символ по его номеру функцией chr(). Казалось бы, всё так просто, да вот только php не особо то хорошо работает с юникодов, поэтому пришлось изобретать какие то велосипеды и быдлокодить, в итоге 3х часовых опытов получился PHP класс для работы с sms на данном модеме.

Читать полностью »

Архитектура чистого кода и разработка через тестирование в PHP - 1

Понятие «архитектура чистого кода» (Clean Code Architecture) ввел Роберт Мартин в блоге 8light. Смысл понятия в том, чтобы создавать архитектуру, которая не зависела бы от внешнего воздействия. Ваша бизнес-логика не должна быть объединена с фреймворком, базой данных или самим вебом. Подобная независимость даёт ряд преимуществ. К примеру, при разработке вы сможете откладывать какие-то технические решения, например выбор фреймворка, движка/поставщика БД. Также вы сможете легко переключаться между разными реализациями и сравнивать их. Но самое важное преимущество такого подхода — ваши тесты будут выполняться быстрее.

Просто подумайте об этом. Вы действительно хотите пройти роутинг, подгрузить абстрактный уровень базы данных или какое-нибудь ORM-колдовство? Или просто выполнить какой-то код, чтобы проверить (assert) те или иные результаты?
Читать полностью »

Давным давно передо мной встала задача реализовать механизм инициализации контроллеров в Symfony, т.е. выполнение неких дефолтных действий перед каждым вызовом экшна контроллера. Первое, что пришло на ум, — это добавить EventListener для события kernel.controller, в котором будет вызываться метод контроллера initialize, если он есть. Данным способом я пользуюсь уже на протяжении нескольких лет.

Буквально на днях я задумался: а что если необходимо перед экшном выполнить разные методы для разных контроллеров, несколько методов подряд, а некоторые из них даже несколько раз и с разными параметрами? В данной статье я хочу рассказать, как я решил эту проблему с помощью аннотаций. Думаю, эта статья будет полезна в том числе и тем, кто никогда не работал с аннотациями.
Читать полностью »

Установка и настройка Yii2 описаны в официальном руководстве, а так же опубликовано множество статей, но я не нашел того руководства, которое помогло бы мне установить и настроить этот фреймворк от начала и до конца. Во время установки я столкнулся с некоторыми вопросами, ответы на которые находились в разных местах на просторах интернета. После продолжительных плясок с бубнами я настроил Yii2 так как хотел. Свой опыт настройки я и опишу в этой статье, в надежде что кому-то это сократит время плясок и упростит жизнь.
Читать полностью »

в 20:26, , рубрики: php, yii, yii 2, yii framework, yii2

Вышла версия 2.0.7 PHP фреймворка Yii. Как установить или обновиться описано на странице http://www.yiiframework.com/download/.

Данная версия содержит более сотни улучшений и исправлений, уточнения документации и её переводы.

Для обновления может понадобится выполнить дополнительные действия, описанные в UPGRADE.md.

Спасибо нашему замечательному сообществу, которое дало нам множество пулл-реквестов и обсуждений. Без вас этого релиза не было бы. Спасибо!

За процессом разработки Yii можно следить, поставив звёздочку или нажав на watch на странице проекта на GitHub. Также у нас есть Twitter и группа в Facebook.

Ну а теперь рассмотрим самые интересные улучшения и исправления этого релиза.
Читать полностью »

PHP-Дайджест № 79 – интересные новости, материалы и инструменты (1 – 14 февраля 2016) - 1

Предлагаем вашему вниманию очередную подборку со ссылками на новости и материалы.

Приятного чтения!
Читать полностью »

В последнее время задался вопросом написания php класса для работы с базой данных mysql. Мои требования – удобство формирования запроса к базе данных и возможность сортировки и записи данных через массив, что упрощает работу с БД.

В результате появился вот такой класс:
Читать полностью »

Мы привыкли почему-то разделять REST и RPC, мне кажется это разделение искусственным. Просто REST строже и ограничен в методах, и это не всегда оправдано в сложном приложении.

Сделаем простую основу для написания сервисно-ориентированной архитектуры. Как стек технологий используем славный Yii2, быстрый Nginx и молниеносный Redis. Почему именно так, станет ясно позднее.

Для управления сущностями на примитивном уровне СREATE, UPDATE, DELETE, GET нам вполне достаточно Rest техники которая заложена в Yii2.

Для облегчения работы в сцепке Nginx + Redis, нам придется использовать немного нестандартный подход, то есть полностью передать как параметры: класс, метод и другие нужные параметры. Для валидации этой компании используем наипростейшую форму Yii2 Model (для экономии места проигнорируем code style):
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js