The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Создать новую тему
 - Свернуть нити
Пометить прочитанным
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |  
Форум WEB технологии
Новая беда, !*! ACCA, (Разное) 25-Ноя-21, 05:24  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
У CA теперь укороченый срок действий SSL сертификатов. Типа платишь за 3 года, а дают сертификат на 1 год с обязательством обновить.

Недавно наехали на предмет обновить. Прислали .zip с новым сертификатом и новым КЛЮЧОМ. Очень смешно. Полагаю, 99.95% дятлов тупо схавают.

Получается, HTTPS в глобальном смысле скомпрометирован. Какие-то ещё мысли, коллеги?



Как и чем выставить БД в веб в стиле минимализма?, !*! AA_suited, (Поиск и настройка типовых скриптов) 24-Окт-21, 01:32  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Важно: я не ищу альтернативу phpMyAdmin, так как SQL DDL предполагается держать в файлах, а не конструировать в стиле phpMyAdmin через веб-интерфейс!

Как назвать искомое мной -- прямо не знаю, ну пусть это будет скрипт.

Язык программирования скрипта не очень важен -- даже и Хаскель пойдет. Но если будет выбор, то лучше все же что-то привычное: С++/java/C#/С (именно с такими приоритетами).

Пример: возможность зайти на урл вроде такого:


http://example.com/db?action=edit&token=mysecret&SQL=select&...,myfield2%20from%20table%20where%20id=%%1&arg1=123

Результат: если токен подходящий (т.е. соответствует авторизованному пользователю, и у пользователя есть права на доступ к id=123), то скрипт  выдаёт страницу, в которой все поля записи показываются, причем каждое в своем виджете (например, если какое-то текстовое поле означает адрес картинки, то показывается эта картинка, а не текст). Далее пользователь может отредактировать и сохранить запись.

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

Что неприемлемо: если инфа о соответствии виджетов полям будет хранится языково-зависимым образом, например в виде исходного текста с определением кучи классов на языке скрипта (однако реализация виджетов в скрипте будет на языке скрипта -- а как же иначе?). В остальном вопрос "как определяется виджет для поля" скрипт решает сам, например, беря (поле, таблица,базы_данных, имя_виджета) из таблицы БД, или из json, или же, прости меня Макаронный Монстр, из xml-файла.

Пример как неприемлемо:


class mydb::mytable::myfield1: public db_image { };
class mydb::mytable::myfield2: public db_text { };
class mydb::mytable::myfield3: public db_number { };

Пример как можно:


<widgets>
<assign db="mydb" table="mytable" field="myfield1" widget="db_image" />
<assign db="mydb" table="mytable" field="myfield2" widget="db_text" />
<assign db="mydb" table="mytable" field="myfield3" widget="db_number" />
</widgets>


Перечислю фичи:

1. Виджеты ко всем полям с возможностью показа и редактирования. В том числе виджеты для таблиц с отношением "внешний ключ".

2. Шаблоны страниц, но не слишком сложные, или, альтернативно, вызов функции полноценного ЯП для формирования страницы из виджетов.

3. Аутентификация/авторизация (юзера, пароли, токены, права, роли) -- или хотя бы только токены.

4. Файлы (можно хранить в БД или ФС по выбору библиотеки); желательно удаление по счётчику ссылок на них =0.

Замечания:

1. Роутинг и другие вещи полезны, но не входят в понятие "минимализм".

2. Токен, понятно, лучше передавать кукой, но в гет-параметрах он тоже должен восприниматься.

3. Создавать/удалять токены, регистрировать юзеров и т.п. скрипт не обязан. Он должн только знать, откуда их брать, и как их проверять.

4. Тут на самом деле ещё кое-какие проектировочные решения должны быть (например, как быть с виджетами на несколько полей), но это не принципиально.

сгенерировать последовательность чисел, !*! Romka, (MySQL) 06-Окт-21, 06:12  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
прошу вас не ругаться а просто помочь
сгенерировать последовательность чисел в mysql on 00001 до 10000 и вставить в таблицу


nginx не отвечает 444, !*! TyLLIKAH, (nginx) 13-Июл-21, 11:59  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Задача: не отвечать вообще на явно мусорные запросы

В конфиге прописано
if ($http_user_agent = "") {
    return 444;
}

if ($http_user_agent = "-") { // на всякий случай
    return 444;
}

И тем не менее:
139.59.225.6 http://domain.tld - [13/Jul/2021:04:27:10 +0300] "GET / HTTP/1.0" 400 248 "-" "-" 0.000

Почему он здесь отвечает 400 ?

Но иногда это срабатывает:
135.125.245.246 https://domain.tld - [08/Jul/2021:03:55:44 +0300] "POST / HTTP/1.1" 444 0 "-" "-" 0.000

Я подозреваю, приходит не совсем пустой UA. Пустым его делает nginx при записи в лог.


Похожее с запросами
if ($request_method !~ ^(GET|POST|HEAD)$ ) {
    return 444;
}

Но
193.70.3.242 http://domain.tld - [07/Jul/2021:00:28:18 +0300] "\x00\x00\x02\x00" 400 150 "-" "-" 0.044

Почему он здесь отвечает 400 ?


curl проблема с сертификатом, не получается обойти, !*! kadi4, (Разное) 03-Июл-21, 11:33  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет в этом чате!

curl при попытке скачать html страницу выдает ошибку с сертификатом.
Ок, проблема известная, ставим ключ -k или --insecure, но тогда команда подвисает, страничка не скачивается.

strace -e openat curl -k https://me_domen.ru/

зависает на строчке:

openat(AT_FDCWD, "/etc/ssl/certs/ca-certificates.crt", O_RDONLY) = 6

wget при этом с ключем игнорирования сертификата скачивает все успешно, но мне нужен именно curl.

Куда копать, кто виноват и что делать? Все уже перегуглил, сертификаты на десктопе сто раз обновил.

Как дать доступ на запись пользователям www-data и SFTP?, !*! MultiGramen, (nginx) 18-Июн-21, 13:56  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Я пишу сайты и загружаю их на сервер через SFTP. В качестве Web-сервера использую NGINX.

После этого возникает дилемма с доступом: если владелец пользователь SFTP, то я не могу администрировать сайт (например ставить на него обновления), а если владелец www-data, не могу записывать файлы в каталог по протоколу SFTP. Получается так, что если нужно поставить обновления, я вынужден писать команду:
chown -R www-data:www-data /var/www/site.ru
, а после обратно менять права как было.

Возможно ли найти компромисс, чтобы можно было и записывать файлы в каталог, и обновлять сайт? Я понимаю, что проблема здесь в правах, но какие именно права необходимо выставить для оптимальной безопасности сайта/сервера и этих возможностей? может вовсе существует другой метод решения этой проблемы?



Отслеживание самолетов в реальном времени, !*! __Vadim__, (Разное) 26-Май-21, 21:12  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет . Нужно сделать курсовой проект ( нужно сделать карту и чтобы на ней в реальном времени отображались передвижение самолетов )

С чего начать ? Кто подскажет как его сделать

Перенос glpi, !*! stas24, (web-разработка, CGI) 06-Апр-21, 14:01  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день. Установлен GLPI 9.4.3 на хосте (nic.ru) есть задача перенести его на centos. Установил centos на сервере, последний php, marinadb необходимые дополнения к установке glpi, установил GLPI 9.5.4 всё запустилось хорошо. И встал вопрос как перенести с старого glpi данные в новый. Пробовал через phpmyadmin выгружал базу и загружал на cerntos (выдало незначительную ошибку база пперенеслась и вроде подключилась, но данных нет, как будто на стандартной базе. Пробовал поменять папки с старого glpi скачал их и заменил на новом, вообще просто белый экран без ошибок(. Подскажите что делаю не так и где затык? Или может изначально подход не правильный?
apache2 Cannot assign requested address: AH00072: make_sock: co, !*! lotric, (Apache, http-серверы) 03-Апр-21, 20:16  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
debian 9
как сделать задержку при старте или перезапуск если служба не запущена?

апр 02 10:39:35 server.ru systemd[1]: Starting The Apache HTTP Server...
апр 02 10:39:40 server.ru apachectl[625]: AH00558: apache2: Could not reliably determine the server's fully qualified do
апр 02 10:39:41 server.ru apachectl[625]: (99)Cannot assign requested address: AH00072: make_sock: could not bind to add
апр 02 10:39:41 server.ru apachectl[625]: no listening sockets available, shutting down
апр 02 10:39:41 server.ru apachectl[625]: AH00015: Unable to open logs
апр 02 10:39:41 server.ru apachectl[625]: Action 'start' failed.
апр 02 10:39:41 server.ru apachectl[625]: The Apache error log may have more information.
апр 02 10:39:41 server.ru systemd[1]: apache2.service: Control process exited, code=exited status=1
апр 02 10:39:41 server.ru systemd[1]: Failed to start The Apache HTTP Server.


/etc/init.d/apache2
DESC="Apache httpd web server"
NAME=apache2
DAEMON=/usr/sbin/$NAME

SCRIPTNAME="${0##*/}"

Логи catalina.out в TomCat 9 в формате JSON, !*! kirilvx, (Java, JSP, сервлеты) 06-Мрт-21, 01:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем привет!

Подскажите пожалуйста как в TomCat 9 логи catalina.out вести в формате JSON (можно перекидывать в другой файл например 1234.log но в формате JSON)

Только в каждую строку JSON надо вставлять ещё - статичный параметр "Program":"Tomcat" - так нужно

спасибо


Есть ли сервис приёма платежей без внешнего виджета на сайте?, !*! Кровосток, (Разное) 09-Фев-21, 15:15  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день, товарищи Специалисты!

У меня вопрос такой, есть ли сервисы приёма платежей которые позволяют организовать на моём сайте свою исключительно форму и последующую передачу требуемых параметров в сервис эквайринга?

Ну т.е. чтобы я по требуемому api передавал POST'ом все необходимые данные, получал от сервиса платежей промежуточные ответы и т.п. а пользователь совершающий платёж всё время работал лишь в форме которую генерирует мой сайт?



динамическое создание кнопок, !*! parad, (JavaScript) 27-Дек-20, 23:35  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
привет, мир!
абсолютно не html/js разработчик. собственно требования в дизайне нет никакого.
есть сервак, для которого сделал html-страничку, получающую через веб-сокеты от сервера json со списком текущих сервисов и их состояние. для каждого сервиса должно быть две кнопки: старт и стоп.
сделал фронтенд страничку, на которой через вебсокет выдаю таблицу сервисов, состояние и счетчики определенные. выглядит это так:

<html>
    <head>
        <meta charset="utf-8" />
        <script language="javascript" type="text/javascript">
            var ws = new WebSocket( 'ws://' + location.host + '/services/state.json' );
            if( ! window.console )
                { window.console = { log: function() {} } };
            ws.onopen = function( ev )  { console.log( ev ); };
            ws.onerror = function( ev ) { console.log( ev ); };
            ws.onclose = function( ev ) { console.log( ev ); };
            ws.onmessage = function( ev ) {
                console.log( ev );
                var data = JSON.parse( ev.data ).data;
                var table = '';
                table += '<table border="1">';
                for( var i in data ) {
                    var service = data[ i ];
                    table += '<tr>';
                    table += '<td>' + service.name + '</td>';
                    table += '<td>' + service.state + '</td>';
                    table += '<td>' + service.failedCounter + '/' + service.failedLimit + '</td>';
                    table += '<td><button href="" type="button">СТАРТ</button></td>';
                    table += '<td><button href="" type="button">СТОП</button></td>';
                    table += '</tr>';
                }
                table += '</table>';
                messages = document.getElementById( 'state' );
                messages.innerHTML = table;
            };
        </script>
    </head>
    <body>
        <div class="content">
            <h1>сервисы</h1>
            <a href="/services/state.json">скачать слепок</a>
            <div id="state"/>
        </div>
    </body>
</html>

необходимо добавить реакцию на динамически созданные кнопки СТАРТ/СТОП для каждого сервиса, так чтобы дергался определенный урл гет-запросом ( к примеру '/some/url?service=name&action=STOP' ), так чтобы не покидать страницу.

подскажите как проще всего это добавить в существующий код, прям самый простой способ.
спасибо.

Tomcat 8 и ограничение доступа в пределах сервлета., !*! Harlan, (Разное) 27-Ноя-20, 12:45  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Один производитель (мать его за ногу), сделал свой сервлет для Tomcat 8 из двух частей:
Указываешь:
https://domain.info/dvl/Login.html и попадаешь в "админку" системы.
https://domain.info/dvl/ClientLogin.html и попадаешь в клиентский интерфейс.
Клиенты должны попадать в свою часть совершенно свободно и из любой точки мира, а, вот админка, хоть и закрыта логином и паролем, но всё равно не желательно выставлять её за пределы локальной сети.
В папке сервлета webapps\dev\js\ есть скрипты Login.js и ClientLogin.js
Подскажите, можно ли разрешить доступ к странице ClientLogin.html с любого адреса, а к странице Login.html только с определённых адресов?
Установка капчи для сайта на WP, !*! Uzer, (JavaScript) 21-Ноя-20, 14:21  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Всем доброго времени. Появилась необходимость установить капчу для сайта на CMS WP применять буду капчу от гугла. В интеренете нашел готовые решения только для различных форм на сайте. В моем случае мне необходимо сделать капчу для определенных ссылок на сайте, чтобы при нажатии на ссылку выводилась капча.
Как я понял нужно использовать JS типа писать событие onclick на класс ссылки при котором вызвается капча?
Этого будет достаточно, обработчик на php не нужен?  
nginx apache тормозит, !*! Alex, (nginx) 20-Ноя-20, 13:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Запрос (ajax, http) поступает на nginx (отдельная железка прокси) он переаресовывается на Apache+php (отдельная железка).
Смотрю по логом доступа tail -f там и там.

Время засинхронизировано.
Отправляю запрос 13:15:00
apache 13:15:00
nginx 13:15:23

Апач отдает wav файл размером 700кБ.

Нагрузки на серверах нету, единственные запросы.

Убираю из цепочки nginx, апач отрабатывает ответ за 200-400мс.

Куда смотреть ????? Что может быть ??

Что означает этот код на php?, !*! Крол, (PHP) 12-Окт-20, 17:59  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Товарищи, объясните пожалуйста что делает этот код:
=======================================================
Class XXX {
    public static function create(
        ?ResponseFactoryInterface $responseFactory = null,
        ?ContainerInterface $container = null,
        ?CallableResolverInterface $callableResolver = null,
        ?RouteCollectorInterface $routeCollector = null,
        ?RouteResolverInterface $routeResolver = null,
        ?MiddlewareDispatcherInterface $middlewareDispatcher = null
    ): App {
        static::$responseFactory = $responseFactory ?? static::$responseFactory;
        return new App(
            self::determineResponseFactory(),
            $container ?? static::$container,
            $callableResolver ?? static::$callableResolver,
            $routeCollector ?? static::$routeCollector,
            $routeResolver ?? static::$routeResolver,
            $middlewareDispatcher ?? static::$middlewareDispatcher
        );
    }
}

XXX::create();

rpBA, rpAD, rpHI, rpHN.... в mDNS -- что это за параметры?, !*! ivan, (Разное) 08-Сен-20, 08:29  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
В различных утилитах, которые работают с mDNS, всегда есть параметры rpBA, rpAD, rpHI, rpHN и др. с похожими именами. Например, тут https://gitlab.com/kalilinux/packages/bettercap/blob/105df6d...

Но, я никак не могу найти что-то похожее в спецификации mDNS.

Что это за парамерты, к чему они относятся - к mDNS вообще или нет? Если да, то где они в спецификации?

Как зашифровать канал с помощью Nginx, !*! Аноним, (Безопасность) 29-Авг-20, 13:26  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Подскажите, плиз, как зашифровать канал с помощью Nginx?

Ситуация следующая: есть роутер с внешним веб-доступом по http://
В Интернете есть внешний реверсный сервер на Nginx, через который можно обращаться к роутеру извне по схеме:

Инет -----http-----> Внешний реверсный Nnginx-прокси ------http------> | Роутер

На данный момент конфиг Nginx следующий:

    server {
        server_name my_http_router.ru;
        listen      88.88.88.88:80;
        location / {
            proxy_pass       http://77.77.77.770:80;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_redirect   default;
            proxy_set_header Host              $http_host;
            proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Real-IP         $remote_addr;
        }
    }

Все это вместе работает самым чудесным образом.
Важный нюанс: этот конфиг поддерживает также и сокеты.

Задача состоит в том, чтобы зашифровать участок между Реверсным Nginx-прокси и роутер с помощью еще одного локального прокси, т.е. вот так:

Инет -----http-----> Реверсный Nnginx-прокси ------httpS://------> | Локальный Nnginx-прокси --http--> Роутер

При этом требуется, чтобы сохранилась поддержка сокетов.

Не подскжет ли многоуважаемый All конфиг для этого локального прокси?

PS. VPN и другие решения не предлагать, нужна реализация именно на Nginx.



PHP + Ajax, JSON, HTML и SQL! Помогите создать правильный запро, !*! Pavl, (web-разработка, CGI) 30-Июл-20, 14:13  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день!
Есть два файла.
Файл index2.php:

<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'mysite');

try {
    $pdo = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
} catch (PDOException $e) {
    echo 'Ошибка при подключении к базе данных!';
}

$query = 'SELECT * FROM `poyas3`';
$result = $pdo->query($query);
$table = $result->fetchAll(PDO::FETCH_ASSOC);
?>

<!DOCTYPE html>
<html lang="ru">
<head>
    <title>Ajax и JSON</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
        $("select").bind("click", function(event) {
            ajax({'func': 1});

        });
        });
        function ajax(data) {
            $.ajax({
                url: 'api2.php',
                type: "POST",
                data: data,
                dataType: "text",
                error: error,
                success: success
            });
        }

        function error() {
            alert('Ошибка при загрузке данных!');
        }
        function success(result) {
            var result = $.parseJSON(result);
            var str = '';
            for (var i in result)
                str += '<b>' + i + '</b>: ' + result[i] + '<br />';
            $('#result').empty();
            $('#result').append(str);
        }
    </script>
</head>
<body>
    <div>


            <p><select name="list1">
                    <option>Выберите из списка</option>

                    <?php foreach($table as $idx => $data) {
                        echo '<option>'.$data['title'].'</option>';
                    }?>
                </select></p>

    </div>
    <div id="result"></div>
</body>
</html>

И файл api2.php:

<?php
if (isset($_POST['func']) && $_POST['func'] == '1') {

    //$vibor = $_POST['list1'];

    define('DB_HOST', 'localhost');
    define('DB_USER', 'root');
    define('DB_PASSWORD', '');
    define('DB_NAME', 'mysite');
    try {
        $pdo = new PDO('mysql:host=' . DB_HOST . '; dbname=' . DB_NAME, DB_USER, DB_PASSWORD, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
        $query = "SELECT * FROM `poyas3` ORDER BY rand() LIMIT 1";
        $result = $pdo->query($query);
        $row = $result->fetch(PDO::FETCH_ASSOC);
        echo json_encode($row);
    } catch (PDOException $e) {
        echo 'Ошибка: '.$e->getMessage();
    }
}
?>

Если применять скрипты именно в таком виде, то результатом работы будет вывод на экран данных одной случайной строки из базы данных. В БД poyas3 3 поля: id, title(название часового пояса), offset(смещение по времени).
Нужно, чтобы при выборе часового пояса из выпадающего списка и нажатии на него на экране появлялось смещение по времени выбранного часового пояса. Пробую, по-разному, не получается.
Как это сделать?

Ошибка работы IIS код 503, !*! spanjokus, (Разное) 03-Июл-20, 11:50  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Коллеги добрый день! Поднял тестовый стенд RDS на Windows Server 2019. Сама терминальная ферма работает, но вот адрес RDWeb не открывается получаю ошибку 503.

1. Учетную запись пул проверил
2. Пул работает
3. Ошибок в журнале событий не нашел по этому вопросу

Кто-то сталкивался с таким?

Почему не работает поиск через strpos()?, !*! xintrea, (PHP) 19-Май-20, 14:22  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Давненько я не трогал PHP...

И вот сейчас наткнулся на такую вещь. Следующий простейший код не срабатывает:


<?php

$text='Thе best wоmеn fоr sеx in уour town: https://test.com/test';
$stopWord='for sеx';

if(strpos($text, $stopWord)!==false)
{
  echo 'Block!';
}

?>


То есть, в консоль строка "Block" не выводится.

Если же $stopWord сделать 'for' или 'sex', то поиск срабатывает.

Читаю документацию по strpos() - ничего про пробельные символы не сказано. Вроде как функция должна тупо находить подстроку. Но не находит. Почему?

[сообщение отредактировано модератором]

блокировать редирект, !*! Роман, (nginx) 07-Май-20, 20:15  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
можно ли блокировать в nginx редирект на мой сайт с другого
sberbank.ru, обращение к 127.0.0.1, !*! Аноним, (Разное) 08-Апр-20, 14:07  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]


ROLLBACK транзакций в цикле для PostSQL - как правильно делать?, !*! xintrea, (Базы данных) 10-Мрт-20, 15:13  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Примечание: PostSQL - это PostgreSQL 9.1, просто в заголовок не помещается

Скрипт написан на PHP.

В нем есть PHP-цикл, который выполняет порцию из ~1000 отдельных INSERT. Отдельные INSERT (а не один большой) сделаны вот по какой причине: некоторые INSERT могут завершиться ошибкой, например если значение вставляемого поля не уникально для поля с флагом UNIQUE (у меня это поле содержит uuid). Такие ошибки надо просто проигнорировать.

После этих INSERT-ов, в другую, сервисную, таблицу записывается последний корретно добавленый uuid. Это нужно из-за того, что данные для очередной порции INSERT могут вытягиваться с разных хостов, и для каждого такого хоста хранится свой uuid.

В любом случае, 1000 INSERT-ов и команда UPDATE для сохранения uuid, должны оборачиваться в одну транзакцию. Это нужно для сохранения консистенции данных. Проблема в том, что если при выполнении какого-то INSERT совпадет uuid, то будет ошибка, и будет откатана ВСЯ транзакция.

Чтобы это обойти, я хочу воспользоваться SAVEPOINT. То есть, сделать перед INSERT команду SAVEPOINT, и если INSERT завершился ошибкой, сделать ROLLBACK. Но я читаю документацию, и не могу понять, как это правильно сделать. У меня есть два варианта:

Вариант первый - простой:


BEGIN;

цикл на ~1000

SAVEPOINT beforeInsert;
INSERT ...
если неудачно
   ROLLBACK TO SAVEPOINT beforeInsert;

конец цикла

UPDATE last_uuid ...;
COMMIT;

Вариант второй - каждый раз удалять SAVEPOINT:


BEGIN;

цикл на ~1000

SAVEPOINT beforeInsert;
INSERT ...
если неудачно
   ROLLBACK TO SAVEPOINT beforeInsert;

RELEASE SAVEPOINT beforeInsert

конец цикла

UPDATE last_uuid ...;
COMMIT;

Тут есть две непонятки.

Непонятка первая:

Вроде как написано, что не может быть несколько точек сохранения под одним и тем же именем, поэтому удаление SAVEPOINT в цикле - необходимо. С другой стороны, SAVEPOINT с одним и тем же именем должен быть _один_ в пределах одной транзакции, а мы в цикле таки создаем SAVEPOINT с одним и тем же именем. То есть тут вопрос, а можем ли мы в принципе создавать SAVEPOINT в пределах одной транзакции с одним и тем же именем, даже если мы его и удаляем, или надо все время генерить SAVEPOINT с разными именами?


Непонятка вторая:

Я пока что склоняюсь, что вариант кода 2 должен быть рабочим. Но хотелось бы узнать, что лучше по производительности: постоянно создавать и удалять SAVEPOINT, или создавать SAVEPOINT с разными именами (например beforeInsert0, beforeInsert1, ... beforeInsertN), и они потом сами удалятся при завершении транзакции?

Asterisk GUI, !*! Алекс, (Разное) 10-Мрт-20, 12:33  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день. Подскажите по такому вопросы - есть тестовый рабочий asterisk (все звонит и работает). На досуге прикрутил web-интерфейс. Работает, картиночки показывает. Но проблема в том что не подхватывается рабочий конфиг сервера -  все чисто и ни чего как бы не настроено. Нет ни транков ни полльзователей и т. д.
Куда рыть?
домен только https, !*! rtr54name, (Apache, http-серверы) 08-Мрт-20, 16:29  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Настраиваю bind по этому мануалу:
https://www.dmosk.ru/miniinstruktions.php?mini=bind-primary
Не использую apache, nginx.
Нужно, чтобы при запросе domain.com всегда открывался https://domain.com.


Stunnel конфигурация, !*! Григорий, (Разное) 04-Мрт-20, 20:29  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день,

Столкнулся со странной проблемой. Поднял stunnel на внешний сайт. Пробую кинуть на него POST напрямую, всё отрабатывает корректно.:
curl https://site.com/site  -X POST -d '{data}' --cacert /etc/stunnel/certs/root-ca.crt --key /etc/stunnel/client.key --cert /etc/stunnel/certs/client.crt


Пробую через stunnel, получаю ошибку:
curl http://127.0.0.1:1919/site  -X POST -d '{data}'

Причём если я правильно понимаю, то это ошибка уровня приложения, а не уровня SSL:
<html> <head> <title>Invalid Cert</title> </head>CN=heresCN,OU=heresOU,O=HeresO,C=US is not valid on this url</html>


Собственно, в чём вопрос. В чём может быть разница между SSL соединением которое иницирует cURL и соединением, которое делает stunnel? Они же должны идентично отрабатывать? В какую сторону копать?


####################################
debug = 7
output = /var/log/stunnel/stunnel.log
setuid = nobody
setgid = nobody
pid = /tmp/stunnel.pid

[tun]
client = yes
accept = 1919
connect = site.com:443

#options = NO_SSLv2
#options = NO_SSLv3
sslVersion = TLSv1.2
ciphers = ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256

CAfile = /etc/stunnel/certs/root-ca.crt
cert = /etc/stunnel/certs/client.crt
key = /etc/stunnel/client.key
#########################

Синхронизация содержимого таблицы для PostgreSQL 9.1, !*! xintrea, (PostgreSQL) 04-Мрт-20, 16:30  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Ковыряюсь сейчас с древним Astra Linux 1.3 (Debian Wheezy с ядром 3.2.0), и нужно мне сделать синхронизацию идентичных таблиц на 5-ти хостах.

Таблицы имеют идентичную структуру. Есть поля:

    PRIMARY KEY id,
    TIMESTAMP,
    UUID,
    прочие поля

Содержимое записей не меняется. Синхронизация должна быть двунаправленная (master-master?). То есть, нет никакой «главной» таблицы. Просто все записи, созданные на разных хостах, должны в итоге присутствовать на инстансах PostgreSQL на всех хостах.

Скорость репликации не важна. Достаточно, если синхронизация будет происходить периодически. В минуту каждый хост может добавить в таблицу от 0 до ~1000 новых записей. В любой момент сеть может «развалиться» и хосты не смогут видеть друг друга, при этом новые записи будут создаваться. После восстановления сети все новые записи должны засинхронизироваться на всех хостах.

Не факт, что все хосты будут работать одновременно. Может 4 хоста работать, а 1 быть выключен. После его включения он должен принять все данные, которые «пропустил» когда был выключен. Может быть и наоборот: работает только 1 хост, остальные выключены. После включения остальных хостов, данные с первого хоста должны перетечь на все остальные.

* * *

Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу. Насколько я понял, средства репликации, существующие для PostgreSQL 9.1 (тот же slony), умеют делать только master-slave репликацию, да и работа такой репликации в условиях нестабильной сети под большим вопросом.

Мне нужно что-то более простое, типа pt-table-sync от Percona, только не для MySQL, а для PostgreSQL. И чтобы оно работало на древних линухах.

Перед тем, как я начну писать решение на коленке, я хочу попробовать решить задачу уже готовыми инструментами. Кто что может предложить? Да, сменить дистрибутив не получится, ибо при аттестации/сертификации/лицензиации средства стандартного программного обеспечения зафиксированы



Ошибка imagick.so, !*! sasha198407, (Модули apache) 25-Фев-20, 18:03  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Здравствуйте. Стоит связка Ubuntu 18.04.4 LTS + NextCloud 18.0.1 + Apache/2.4.29  + PHP 7.3.4.  Все работает хорошо, но периодически выскакивает ошибка
Unable to load dynamic library 'imagick.so' (tried: /usr/lib/php/20180731/imagick.so (/usr/lib/php/20180731/imagick.so: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/imagick.so.so (/usr/lib/php/20180731/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0

В NextCloud  висит строка
В системе не установлены рекомендуемые модули PHP. Для улучшения производительности и совместимости рекомендуется установить эти модули.
imagick

Данная проблема возникла в результате обновлений nextcloud (с версии 16) и самой ubuntu (с версии 16.04). Не знаю важно или нет, но php -v выдает
PHP Warning:  PHP Startup: Unable to load dynamic library 'imagick.so' (tried: /usr/lib/php/20180731/imagick.so (/usr/lib/php/20180731/imagick.so: cannot open shared object file: No such file or directory), /usr/lib/php/20180731/imagick.so.so (/usr/lib/php/20180731/imagick.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
PHP 7.3.4-1+ubuntu16.04.1+deb.sury.org+3 (cli) (built: Apr 10 2019 10:50:34) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.4-1+ubuntu16.04.1+deb.sury.org+3, Copyright (c) 1999-2018, by Zend Technologies

imagick переустанавливал, но не помогло. Как решить проблему? Заранее спасибо.
Создание сайта визитки на php, !*! steamgryshan, (PHP) 15-Фев-20, 18:22  [ | | | ] [линейный вид] [смотреть все] [раскрыть новое]
Добрый день. Решил создать сайт школы в формате сайта-визитки на чистом PHP. Столкнулся с тем, что для меня проблематично разбить эту задачу на подзадачи, т.е., банально, трудно понять с чего начать. Очевидно, что первоначально это должна быть верстка, но хотелось бы понять и более "локальные" задачи. Посоветуете какой то выход из этой ситуации?


 
Пометить прочитанным Создать тему
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | Архив | Избранное | Мое | Новое | | |



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру