Всё началось неплохо (с)… А именно захотел я обновить apache на одном из серверов, Ubuntu на «наисвежайший». Сначала попытался собрать из исходных кодов, но как-то не срослось, а потому чуть погуглив, нашел что в репозитарии ondrej/apache2 всегда лежат уже собраные пакеты самой свежей версии. Казалось бы дело простое:
Но не тут то было..Получил ошибку «No module named ‘apt_pkg'»:
Traceback (most recent call last):
File "/usr/bin/add-apt-repository", line 5, in <module>
import apt_pkg
ModuleNotFoundError: No module named 'apt_pkg'
При попытке доустановить пакет через pip3… вышло сообщение, что пакета то такого и нет..
pip install apt_pkg
ERROR: Could not find a version that satisfies the requirement apt_pkg (from versions: none)
ERROR: No matching distribution found for apt_pkg
Долго гуглил почему так, выяснить так и не смог. Единственное что удалось выяснить, что если запускать pip3 для python3.10, то пакет ищется и устанавливается. Возможно дело в как-то криво установленном python3.11 В результате, пришлось перейти обратно на python3.10
Задача: установить наисвежайшую версию веб сервера apache (установка apache из исходников). В репозитарии, версия довольно старая. Поэтому единственное решение — ставить apache из исходных кодов.
Сначала подготовлю ОС, для возможности компиляции (инструментарий):
Далее необходимо зайти на сайт https://httpd.apache.org/download.cgi и скачать необходимую версию с исходниками httpd и APR (https://apr.apache.org/download.cgi) и APR-UTIL
Распакуем их:
tar xfvj *.bz2
Далее необходимо переместить исходники APR в папку используемых библиотек httpd:
Довольно часто встречается задача автоматизировать заполнение всяческих заявлений..ну например в бухгалтерию. Это вполне можно сделать и на PHP, позволив пользователю на форме веб страницы заполнить основные данные, а затем отдав ему уже сформированный на основе шаблона файл формата docx (файл docx на основе шаблона).
На JavaScript создам функцию — обработчик нажатия на кнопку «Сформировать заявление». Функция делает запрос на сервер, а в ответ получает сформированный файл. Браузер автоматически предложит его сохранить.
function CreateZay(){
console.log("--создаётся заявление..");
var xhr = new XMLHttpRequest();
xhr.open('POST', '/sever/zayav.php', true);
xhr.responseType = 'blob';
xhr.onload = function(e) {
if (this.status == 200) {
var link=document.createElement('a');
link.href=window.URL.createObjectURL(this.response);
link.download="result.docx";
link.click();
}
else {
console.log(e);
}
};
var form_data = new FormData();
form_data.append("position_at_work", position_at_work.value);
form_data.append("me_unit", me_unit.value);
form_data.append("me_name", me_name.value);
form_data.append("date_start", date_start.value);
form_data.append("long_vacation", long_vacation.value);
xhr.send(form_data);
};
С клиентской частью (ну которая в браузере) разобрались. Теперь займемся сервером. Чтобы ничего не изобретать, воспользуемся пакетом phpoffice/phpword:
composer require phpoffice/phpword
Далее подготовим файл-шаблон. Можно в любом редакторе, который поддерживает расширение docx. В файле , те части которые мы хотим заменить, обрамляем ${имя_переменноя}, чтобы получилось например что-то вроде:
Далее, серверная часть, которая заполняет непосредственно сам шаблон:
Задача: Необходимо чтобы при отображении на HTML странице поля input с типом дата, автоматически подставлялась определенная дата (заполнение текущей датой поля input). Ну например текущая+14 дней.
Решение: собственно без javascript тут не обойтись (ну если исключить вариант, что html генерируется на сервере, и соответственно заполняется поле value. Но это не наш метод (с)
<script>
var date = new Date(Date.now());
date.setDate(date.getDate() + 14);
date_start.value=date.toISOString().split("T")[0];
</script>
Что тут интересного? Ну фактически мы пользуемся тем, что value у тега input с типом даты обязательно должно быть в формате гггг-мм-дд, т.е. ISO формат, а в ISO формат мы можем пере конвертировать дату полученную при помощи функции Date. Время нам не нужно, поэтому отсекаем его, разделив дату по разделителю «Т», и взяв первый элемент массива.
Неожиданно задался вопросом как проверить дату истечения сертификата сайта (дата истечения сертификата сайта), если нет возможности воспользоваться для этого онлайн-сервисами, а еще коварный AVP Kaspersky на ПК в браузере подменяет сертификат на свой. В самих файлах *.key *.crt визуально даты не наблюдаются.. Остаётся несколько вариантов: посмотреть по дате создания файла, и прибавить год ;). Ну так себе вариант. Второй, правильный — воспользоваться утилитой командной строки openssl. Примерно так: