Работа с архивами zip на PHP

Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.

$za = new ZipArchive();
$za->open(WUO_ROOT."/tmp.zip");
$result_stats = array();
for ($i = 0; $i < $za->numFiles; $i++){
    $name = $za->getNameIndex($i, \ZipArchive::FL_ENC_RAW);
    $encoded_filename = iconv("cp866","UTF-8//IGNORE",$name);
    var_dump($encoded_filename);
}

Далее попробуем распаковать понравившийся файл:

file_put_contents(WUO_ROOT."/peni.xls", $za->getFromIndex($index_file_peni));

Как видно, всё достаточно просто.

чтение архива zip на php

1С: чтение почты по протоколу IMAP

Прилетела задача прочитать сообщение из почтового ящика по протоколу IMAP. Последнее из пришедших. В принципе в 1С есть штатный функционал для чтения почты, поэтому пример всё сам расскажет за себя:

Процедура ЧитнутьНаСервереImap()
	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АутентификацияPOP3 = Ложь;
	Профиль.АутентификацияSMTP = Ложь;
	
	// IMAP
	Профиль.ИспользоватьSSLIMAP = Истина;
	Профиль.АдресСервераIMAP = "цукацу-укацука.уцкацук.ru";
	Профиль.ПортIMAP = "993"; 	
	Профиль.ПользовательIMAP = "укацу@укацукау.ru";
	Профиль.ПарольIMAP = "цукацукацук";
	Профиль.ТолькоЗащищеннаяАутентификацияIMAP=Ложь;

	Почта = Новый ИнтернетПочта;
	Сообщ = Новый СообщениеПользователю();

		Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP); //ПротоколИнтернетПочты.POP3		
		заголовки=Почта.ПолучитьЗаголовки();
		если заголовки.Количество()>0 тогда		
			ПоследнийЗаголовок=Новый Массив();
			ПоследнийЗаголовок.Добавить(заголовки[заголовки.Количество()-1]);					
			МассивСообщений = Новый Массив;
			МассивСообщений = Почта.Выбрать(Ложь,ПоследнийЗаголовок);		
			
			ТекстСообщения=МассивСообщений[0].тексты[0].Текст;
			сообщить(ТекстСообщения);
		конецесли;
	
	Почта.Отключиться(); 

	

КонецПроцедуры

Из особенностей логики — сначала вычитываю заголовки, т.к. если почты много, то чтение писем будет ОЧЕНЬ долгим. Далее получаю последний по счету заголовок, и вычитываю текст конкретно уже этого письма.

прочитать сообщение из почтового ящика по протоколу IMAP

Другие статьи по тегу 1С можете почитать тут

RedOS 7.3: установка apache (httpd) из исходников

Задача: установить наисвежайшую версию веб сервера apache (установка apache из исходников). В репозитарии, версия довольно старая. Поэтому единственное решение — ставить apache из исходных кодов.

Сначала подготовлю ОС, для возможности компиляции (инструментарий):

dnf install libtool svn expat-devel pcre pcre-devel openssl-devel -y

Далее необходимо зайти на сайт https://httpd.apache.org/download.cgi и скачать необходимую версию с исходниками httpd и APR (https://apr.apache.org/download.cgi) и APR-UTIL

Распакуем их:

tar xfvj *.bz2

Далее необходимо переместить исходники APR в папку используемых библиотек httpd:

mv apr-1.7.4 httpd-2.4.59/srclib/apr
mv apr-util-1.6.3 httpd-2.4.59/srclib/apr-util

Теперь зайдём в получившуюся папку (например httpd-2.4.59), и попробуем собрать конфигурацию для компиляции:

./buildconf

И далее сконфигурируем установку:

./configure --enable-ssl --enable-so --with-mpm=event --with-included-apr --prefix=/usr/local/apache2

И наконец собираем бинарник и установим его по указанным выше путям:

make
make install
установка apache из исходников

Как добавить рабочие дни к дате

Задача добавление рабочих дней к дате (добавить рабочие дни к дате) встречается довольно часто. И штатно должна решаться с помощью стандартного функционала БСП — «Производственный календарь». Например так:

Функция ДобавитьКДатеРабочиеДни(ДатаНач,ЧислоРабочихДней) экспорт
    Запрос=Новый Запрос;
    Запрос.Текст="ВЫБРАТЬ
                 |    ВЫБОР
                 |        КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
                 |                ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень
                 |            ТОГДА 1
                 |        ИНАЧЕ 0
                 |    КОНЕЦ КАК ЧислоРабочихДней,
                 |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
                 |ПОМЕСТИТЬ ТЗ
                 |ИЗ
                 |    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
                 |ГДЕ
                 |    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    ТЗ.ДатаКалендаря,
                 |    СУММА(ТЗ1.ЧислоРабочихДней) КАК ЧислоРабочихДней
                 |ПОМЕСТИТЬ ТЗНакопл
                 |ИЗ
                 |    ТЗ КАК ТЗ
                 |        ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ1
                 |        ПО (ТЗ1.ДатаКалендаря <= ТЗ.ДатаКалендаря)
                 |
                 |СГРУППИРОВАТЬ ПО
                 |    ТЗ.ДатаКалендаря
                 |;
                 |
                 |////////////////////////////////////////////////////////////////////////////////
                 |ВЫБРАТЬ
                 |    МАКСИМУМ(ТЗ.ДатаКалендаря) КАК ДатаКалендаря
                 |ИЗ
                 |    ТЗНакопл КАК ТЗ
                 |ГДЕ
                 |    ТЗ.ЧислоРабочихДней = &ЧислоРабочихДней";
    Запрос.УстановитьПараметр("ДатаНач",             ДатаНач);
    ЧислоНедель = Цел(ЧислоРабочихДней/5+0.5);
    ЧислоВыходныхДней = ЧислоНедель*2;
    МаксимальноеКоличествоПраздничныхДнейПодряд = 8; //РождественскиеКаникулы
    ДатаКон = ДатаНач+(ЧислоВыходныхДней+ЧислоРабочихДней+МаксимальноеКоличествоПраздничныхДнейПодряд)*24*60*60;
    Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
    Запрос.УстановитьПараметр("ЧислоРабочихДней",ЧислоРабочихДней);
    Запрос.УстановитьПараметр("РабочийДень",         Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
    Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
    Выборка = Запрос.Выполнить().Выбрать();
    Результат = 0;
    Если Выборка.Следующий() Тогда
        Результат = КонецДня(Выборка.ДатаКалендаря)+1; 
    Конецесли;    
    Возврат Результат;
КонецФункции  

Однако не всё же не все конфигурации содержат производственный календарь. Например почему-то обделено Делопроизводство 2.0. Что-бы не городить огород,, решил задачу «в лоб», без учёта праздничных дней — просто проверяю выпадение даты на субботу-воскресенье. В моём случае этого хватило.

Функция ДобавитьКДатеРабочиеДни(ДатаПроверки,дней)
    добавлено=0;
	пока добавлено<>дней цикл
	  ДатаПроверки=ДатаПроверки+86400;	         
	  Если ДеньНедели(ДатаПроверки) <> 6 ИЛИ ДеньНедели(ДатаПроверки) <> 7 Тогда
		  добавлено=добавлено+1;
	  конецесли;	  
     конеццикла;	
  	Возврат ДатаПроверки;
КонецФункции
добавить рабочие дни к дате

Другие статьи по теме 1С, можно почитать тут

Продвинутая отправка почты из консоли

Есть множество статей как отправить почту из консоли терминала Linux. Но в основной своей массе, это всё касается уже настроенного почтового сервера. А если нужно отправить почту используя настройки SMTP с авторизацией, указанием кодировки и вложением в виде файла? Их есть у меня (с). Ниже пример:

echo "Test text" | mail -e 'set content_type=text/html' -v -S sendcharsets=utf-8,iso-8859-1 -s "Результат тестирование" -S smtp="асываo.ru:587" -S ssl-verify=ignore -S smtp-use-starttls -S smtp-auth=login -S smtp-auth-user="vlg1-Noreply@interrao.ru" -S smtp-auth-password='ываывываы' -S from=noreply@ывывсывс.ru ывсывсыв@сывасывсыв.ru </var/tmp/res.html

Этот пример вышлет письмо в кодировке UTF-8, со вложенным файлом res.html. Авторизация по логину-паролю, с шифрованием start SSL.

как отправить почту из консоли терминала Linux

Другие статьи на эту тему тут

1 23 24 25 26 27 299