Меню

SimpleXLSXGen быстрый экспорт в XLSX

Запилил небольшой, но очень полезный класс для экспорта в Excel

SimpleXLSXGen

$books = [
    ['ISBN', 'title', 'author', 'publisher', 'ctry' ],
    [618260307, 'The Hobbit', 'J. R. R. Tolkien', 'Houghton Mifflin', 'USA'],
    [908606664, 'Slinky Malinki', 'Lynley Dodd', 'Mallinson Rendel', 'NZ']
];
$xlsx = SimpleXLSXGen::fromArray( $books );
$xlsx->saveAs('books.xlsx');

Создание Excel файлов в PHP ещё никогда не было таким простым.

REACT-MySQLi (ещё один)

MySQLi из коробки поддерживает асинхронные запросы, я написал ещё одну обёртку/адаптер под ReactPHP.

Репозиторий на GitHub

Установка

composer require shuchkin/react-mysqli

Пример

$loop = \React\EventLoop\Factory::create();

$db = \Shuchkin\ReactMySQLi\Client::connect($loop, 'localhost', 'root', '', 'my_db' );

$db->query('SELECT id,name,email FROM user')->then(
    function (\Shuchkin\ReactMySQLi\Result $result) {
        print_r( $result->all() ); // array
    },
    function ( \Exception $ex ) {
        trigger_error( $ex->getMessage() );
    }
);
$loop->run();

Коды регионов России и почтовые индексы (регион по индексу)

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

Ниже ссылка на CSV. Если будет спрос, оформлю пакетик на гитхабе.

РегионКонституцияГИБДДПочтаОКАТООКТМОISO-3166-2ГОСТ 7.67-2003
Республика Адыгея01013857979RU-ADRU-AD,RU-ADY
Республика Алтай04046498484RU-ALRU-AL,RU-ALI
Республика Башкортостан0202,102,702450,451,452,4538080RU-BARU-BA,RU-BAS
Республика Бурятия0303670,6718181RU-BURU-BU,RU-BUR
Республика Дагестан0505367,3688282RU-DARU-DA,RU-DAG
Республика Ингушетия06063862626RU-INRU-IN,RU-ING
Кабардино-Балкарская Республика0707360,3618383RU-KBRU-KB,RU-KAB
Республика Калмыкия0808358,3598585RU-KLRU-KL,RU-KAR
Карачаево-Черкесская Республика09093699191RU-KCRU-KK,RU-KAO
Республика Карелия1010185,1868686RU-KRRU-KL,RU-KAR
Республика Коми1111167,168,1698787RU-KORU-KO,RU-KOM
Республика Крым9182295,296,297,2983535RU-CR
Республика Марий Эл1212424,4258888RU-MERU-ME,RU-MAR
Республика Мордовия1313,113430,4318989RU-MORU-MO,RU-MOR
Республика Саха (Якутия)1414677,6789898RU-SARU-SA,RU-SAH
Республика Северная Осетия — Алания1515362,3639090RU-SERU-NO,RU-NOR
Республика Татарстан1616,116,716420,421,422,4239292RU-TARU-TA,RU-TAT
Республика Тыва1717667,6689393RU-TYRU-TY,RU-TUV
Удмуртская Республика1818426,4279494RU-UDRU-UD,RU-UDM
Республика Хакасия19196559595RU-KKRU-KN,RU-KHK
Чеченская Республика2095364,365,3669696RU-CERU-CE,RU-CHA
Чувашская Республика2121,121428,4299797RU-CURU-CU,RU-CHV
Алтайский край2222,122656,657,658,6590101RU-ALTRU-ALT
Забайкальский край7575,80672,673,674,6877676RU-ZAB
Камчатский край4141683,684,6883030RU-KAMRU-KAM
Краснодарский край2323,93,123,193350,351,352,353,3540303RU-KDARU-KRA
Красноярский край2424,84,88,124660,661,662,663,647,6480404RU-KYARU-KYA
Пермский край5959,81,159614,615,616,617,618,6195757RU-PERRU-PER
Приморский край2525,125690,691,6920505RU-PRIRU-PRI
Ставропольский край2626,126355,356,3570707RU-STARU-STA
Хабаровский край2727680,681,6820808RU-KHARU-KHA
Амурская область2828675,6761010RU-AMURU-AMU
Архангельская область2929163,164,1651111RU-ARKRU-ARK
Астраханская область3030414,415,4161212RU-ASTRU-AST
Белгородская область3131308,3091414RU-BELRU-BEL
Брянская область3232241,242,2431515RU-BRYRU-BRY
Владимирская область3333600,602,6021717RU-VLARU-VLA
Волгоградская область3434,134400,401,402,403,4041818RU-VGGRU-VGG
Вологодская область3535160,161,1621919RU-VLGRU-VLG
Воронежская область3636,136394,395,396,3972020RU-VORRU-VOR
Ивановская область3737153,154,1552424RU-IVARU-IVA
Иркутская область3838,85,138664,665,666,667,668,6692525RU-IRKRU-IRK
Калининградская область3939,91236,237,2382727RU-KGDRU-KAG
Калужская область4040248,2492929RU-KLURU-KAL
Кемеровская область4242,142650,651,652,653,6543232RU-KEMRU-KEM
Кировская область4343610,611,612,6133333RU-KIRRU-KIR
Костромская область4444156,1573434RU-KOSRU-KOS
Курганская область4545640,6413737RU-KGNRU-KUG
Курская область4646305,306,3073838RU-KRSRU-KUR
Ленинградская область4747,147187,1884141RU-LENRU-LEN
Липецкая область4848398,3994242RU-LIPRU-LIP
Магаданская область4949685,6864444RU-MAGRU-MAG
Московская область5050,90,150,190,750,790140,141,142,143,1444646RU-MOSRU-MOS
Мурманская область5151183,1844747RU-MURRU-MUR
Нижегородская область5252,152603,6072222RU-NIZRU-NIZ
Новгородская область5353173,174,1754949RU-NGRRU-NGR
Новосибирская область5454,154630,631,632,6335050RU-NVSRU-NVS
Омская область5555644,645,6465252RU-OMSRU-OMS
Оренбургская область5656460,461,4625353RU-ORERU-ORE
Орловская область5757302,3035454RU-ORLRU-ORL
Пензенская область5858440,441,4425656RU-PNZRU-PNZ
Псковская область6060180,181,1825858RU-PSKRU-PSK
Ростовская область6161,161,761344,345,346,3476060RU-ROSRU-ROS
Рязанская область6262390,3916161RU-RYARU-RYA
Самарская область6363,163,763443,444,445,4463636RU-SAMRU-SAM
Саратовская область6464,164410,411,412,4136363RU-SARRU-SAR
Сахалинская область6565693,6946464RU-SAKRU-SAK
Свердловская область6666,96,196620,621,622,623,6246565RU-SVERU-SVE
Смоленская область6767214,215,2166666RU-SMORU-SMO
Тамбовская область6868392,3936868RU-TAMRU-TAM
Тверская область6969170,171,1722828RU-TVERU-TVE
Томская область7070634,635,6366969RU-TOMRU-TOM
Тульская область7171300,3017070RU-TULRU-TUL
Тюменская область7272625,626,6277171RU-TYURU-TYU
Ульяновская область7373,173432,4337373RU-ULYRU-ULY
Челябинская область7474,174454,455,456,4577575RU-CHERU-CHE
Ярославская область7676150,151,1527878RU-YARRU-YAR
Москва7777,97,99,177,197,199,777,799101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,1354545RU-MOWRU-MS,RU-MOW
Санкт-Петербург7878,98,178,198190,191,192,193,194,195,196,197,198,1994040RU-SPERU-SP,RU-SPB
Севастополь92922996767RU-SEV
Еврейская автономная область79796799999RU-YEVRU-JEW
Ненецкий автономный округ8383166111118RU-NENRU-NEN
Ханты-Мансийский автономный округ — Югра8686,1866287110718RU-KHMRU-KHM
Чукотский автономный округ87876897777RU-CHURU-CHU
Ямало-Ненецкий автономный округ89896297114719RU-YANRU-YAN

kannel и supervisord

Забудь про init.d и кривой скрипт из интернета. Вот тебе четкий конфиг /etc/supervisord.conf отсюда https://github.com/antenehrepos/docker-kannel/blob/master/supervisord.conf

[supervisord]
nodaemon=true

[program:bearerbox]
command=/usr/local/kannel/sbin/bearerbox -v 2 /etc/kannel/kannel.conf
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
priority=1

[program:smsbox]
command=/usr/local/kannel/sbin/smsbox -v 2 /etc/kannel/kannel.conf
redirect_stderr=true
stdout_logfile=/dev/fd/1
stdout_logfile_maxbytes=0
priority=2

#[program:wapbox]
#command=/usr/local/kannel/sbin/wapbox -v 2 /etc/kannel/kannel.conf
#redirect_stderr=true
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=2

#[program:sqlbox]
#command=/usr/local/kannel/sbin/sqlbox -v 2 /etc/kannel/kannel.conf
#redirect_stderr=true
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=3

#[program:smppbox]
#command=/usr/local/kannel/sbin/opensmppbox -v 2 /etc/kannel/opensmppbox.conf
#stdout_logfile=/dev/fd/1
#stdout_logfile_maxbytes=0
#priority=3

Теперь ты как белый человек можешь написать в консоли:

supervisord restart bearerbox
supervisord restart smsbox

Я же как сторонник веба открыл для себя доступ /etc/kannel.conf

group = core
admin-port = 13000
admin-password = PWD
...

И просто открываю в браузере или вызываю скриптом:

example.com:13000/graceful-restart?password=PWD

MySQL аналог htmlspecialchars

Вот-так прогнал таблицу через html экранирование уже постфактум.

UPDATE messages SET message = REPLACE(REPLACE(REPLACE(message,'&','&amp;'),'<', '&lt;'), '>', '&gt;')

Суть асимметричного шифрования

Я использую TLS очень часто, как пользователь (Госуслуги, Диадок и т.д.) где зоопарк из всяких рутокенов, криптопрох и т.п., как администратор (доступ по SSH, установка сертификатов для Nginx), и как программист, когда например самописному SMTP серверу нужно добавить поддержку STARTLS или заглушить ругань PHP отключая проверку хоста:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

Вот не втыкал я как оно работает, тупо следовал инструкциям и примерам, понимая только в общих чертах. А сегодня прочитал этот абзац в статье про SSL/TLS и всё встало на свои места: весь опыт и теория.

tls wiki

Суть асимметричного шифрования заключается в том, что используется пара ключей. Один из них используется в качестве открытого (как правило, он публикуется в самом сертификате владельца), второй ключ называется секретным — он держится в тайне и никогда никому не открывается. Оба ключа работают в паре: один используется для запуска противоположных функций другого ключа. Если открытый ключ используется для того, чтобы зашифровать данные, то расшифровать их можно только секретным ключом и наоборот. Такая взаимосвязь позволяет делать две важные вещи.

Любой пользователь может получить открытый ключ и использовать его для шифрования данных, расшифровать которые может только пользователь, владеющий секретным ключом. (RSA)

Если кто-то шифрует данные, используя свой секретный ключ, каждый может расшифровать эти данные, используя соответствующий открытый ключ. Именно это является основой для цифровых подписей. (DSA)

RSA — самый распространенный алгоритм шифрования с использованием асимметричных ключей.

Отправляем почту в PHP в 2019 опубликовал Shuchkin\SimpleMail

$mail = new Shuchkin\SimpleMail();
$mail->setFrom('example@example.com')
	->setTo('sergey.shuchkin@gmail.com')
	->setSubject('Test SimpleMail')
	->setText('Hi, Sergey!')
	->send();

Возможности

  1. Сборка письма цепочкой вызовов
  2. Расширенная поддержка встроенной функции mail
  3. Встроенный SMTP клиент (TLS)
  4. Фабричные методы, один раз указали метод отправки и почту отправителя, а дальше отправляем через копию этого базового объекта
  5. Передача файлов
  6. UTF-8
  7. Свои заголовки
  8. Свой метод отправки
  9. Экспорт в массив или JSON
  10. Импорт из массива или JSON

Установка

Залит на GitHub, см. больше примеров

https://github.com/shuchkin/simplemail

И, конечно, на Packagist:

$ composer require shuchkin/simplemail