• Как синхронизовать бд с другой бд на другом сервере?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Автоматически синхронизировать - репликация
    https://dev.mysql.com/doc/refman/8.0/en/replicatio...

    В вашем случае так как запись может быть сделана в любую из баз, и они должны быть в синхроне то нужна master-master репликация. Читайте информацию по теме "mysql master master replication".
    Из минусов - запросы на запись (update, insert, delete) будут работать чуть дольше так как придётся дожидаться синхронизации данных. Из плюсов - всё будет работать из коробки как только настроите репликацию, и всё что записано в одну базу сразу же будет доступно в другой и наоборот.
    Ответ написан
    4 комментария
  • Переход с MD5 на SHA256 что нужно сделать чтобы работало)?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Решил сделать переход с MD5 на SHA256

    Первая ошибка.
    Переходить нужно сразу на password_hash
    На переходный период реализовать две системы аутентификации. Сначала пробуете по старой (md5), если неудача, то password_verify
    После удачной аутентификации хешируете пароль новым алгоритмом.
    Ответ написан
    Комментировать
  • Как работают рекурсии?

    Vindicar
    @Vindicar
    RTFM!
    Raddzor788,
    Где хранятся все эти значение 1,2,3,4, ведь у моего 'x' нету же звездочки(*х), чтобы собрать столько аргументов.

    Твой x - это несколько разных x. Потому что есть такая вещь как области видимости. Обычно есть область видимости функции (локальная) и глобальная область видимости скрипта. Если функция не видит нужного имени в локальной области - она ищет в глобальной. Если не видит и там - ищет в __builtins__.
    0. По умолчанию есть глобальная область видимости скрипта.
    1. При вызове func(1) создаётся локальная область видимости (скажем, А), в ней создаётся имя x, указывающее на 1.
    2. Отработало условие 1 < 4.
    3. Вызывается func(2). При этом создаётся НОВАЯ локальная область видимости Б (потому что новый вызов функции), в ней создаётся имя x, указывающее на 2.
    4. Отрабатывает условие 2 < 4.
    5. Вызывается func(3). При этом создаётся локальная область видимости В, в ней создаётся имя x, указывающее на 3.
    6. Отрабатывает условие 3 < 4.
    7. Вызывается func(4). При этом создаётся локальная область видимости Г, в ней создаётся имя x, указывающее на 4.
    8. Условие 4 < 4 не отрабатывает. Происходит вызов print(x) - имя x находится в текущей локальной области Г, выводится ассоциированное с ним значение 4. Отрабатывает print(4), происходит возврат из функции, область видимости Г уничтожается.
    9. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости В - в ней имя x связано со значением 3. Отрабатывает print(3), происходит возврат из функции, область видимости В уничтожается.
    10. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости Б - в ней имя x связано со значением 2. Отрабатывает print(2), происходит возврат из функции, область видимости Б уничтожается.
    11. Происходит вызов print(x) в предыдущем "слое" рекурсии. Текущая локальная область видимости А - в ней имя x связано со значением 1. Отрабатывает print(1), происходит возврат из функции, область видимости А уничтожается.
    12. Мы вышли из всех слоёв рекурсии. Мы находимся в теле скрипта и работаем только с глобальной областью видимости.
    Ответ написан
    Комментировать
  • Как решить проблемы с клавиатурой в файловом менеджере far2l в Ubuntu 24.04 в сеансе Wayland?

    unxed
    @unxed Автор вопроса
    Существует несколько способов решения этих проблем:

    1. Оставайтесь на X11

    2. Запускайте far2l с двумя дополнительными параметрами:
    far2l --nodetect=xi --ee

    3. Запустите этот патч:
    sudo perl -pi -e 's/XInputExtension/!InputExtension/g' /usr/lib/far2l/far2l_ttyx.broker

    (использовать параметр --ee всё равно придётся)

    4. Можно взять более свежую версию из Debian:
    mkdir far
    cd far
    wget http://ftp.de.debian.org/debian/pool/main/f/far2l/far2l_2.6.1~beta+ds-1_amd64.deb
    wget http://ftp.de.debian.org/debian/pool/main/f/far2l/far2l-data_2.6.1~beta+ds-1_all.deb
    sudo apt-get install ./*.deb
    apt-cache policy far2l

    Там пофикшен баг с клавиатурой под Wayland. Производится попытка поправить этот баг апдейтом и в Ubuntu 24.04: https://bugs.launchpad.net/ubuntu/+source/far2l/+b...

    Вы можете использовать тот способ, который вам больше нравится.
    Ответ написан
    1 комментарий
  • Почему ломается передача по ссылке в foreach с указанием оператора опциональной последовательности для массива?

    Adamos
    @Adamos
    Потому что вычисление $a ?? [] имеет результатом копию массива, на нее и ссылается переменная цикла. Оригинальный массив в цикл вообще не попадает.
    Ответ написан
    Комментировать
  • Как сделать авторизацию по двум таблицам в Symfony?

    BoShurik
    @BoShurik Куратор тега Symfony
    Symfony developer
    Если объединять пользователей с разными полями не хочется, то можно поступить проще и использовать Chain User Provider

    Тогда достаточно будет только строчки в конфиге, а сущности будут чище, без лишних связей
    # config/packages/security.yaml
    security:
        # ...
        providers:
            backend_users:
                ldap:
                    # ...
    
            legacy_users:
                entity:
                    # ...
    
            users:
                entity:
                    # ...
    
            all_users:
                chain:
                    providers: ['legacy_users', 'users', 'backend_users']
    Ответ написан
    Комментировать
  • Как сделать авторизацию по двум таблицам в Symfony?

    Разные категории пользователей в Symfony лучше всего организовать при помощи ролей.

    Основная таблица users будет содержать всех ваших пользователей, это проще всего. Там же и будет поле с ролями.

    Для дополнительных полей другой категории пользователей лучше всего создать отдельную таблицу, которая будет связана с основной через связь one-to-one либо one-to-many по id пользователя (посмотрите уроки по Doctrine).

    Однако, если пользователей с этими дополнительными полями будет подавляющее большинство, то можно не усложнять, а смело создавать эти поля в основной таблице users.

    Очень советую досмотреть полностью уроки с symfonycasts.com. Они великолепны, и там точно всё необходимое должно быть.
    Ответ написан
    2 комментария
  • Как хранить баланс пользователя в разных валютах?

    @tukreb
    Вы не должны указывать куда пропали деньги, так как они не должны ни куда пропадать вообще.
    Пользователь выбирает тип валют в которой будет хранить и курс никак на это влиять не должен.
    Если пользователь хочет хранит в нескольких видах валюты, значит храните в нескольких типах валюты.
    Ответ написан
    8 комментариев
  • Объясните CASE WHEN THEN?

    @Akina
    Сетевой и системный админ, SQL-программист.
    ...
    SET view = CASE ad_id WHEN 34 THEN 0
                          WHEN 35 THEN 1 
                          WHEN 36 THEN 2
                          END,
        amount = CASE WHEN ad_id = 36 
                      THEN 466
                      ELSE amount
                      END
    WHERE ad_id  IN (34, 35, 36);
    Ответ написан
    3 комментария
  • Как записать в базу пустое поле?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    - $query = $db->query('INSERT INTO `order`(`user_id`, `articul_id`, `sharpener_id`, `barcode`, `quantity`) VALUES ('.$user_id.','.$articul_id.','.$sharpener_id.','.$barcode.','.$quantity.')');
    + $db->prepare(
    +     'INSERT INTO `order` (`user_id`, `articul_id`, `sharpener_id`, `barcode`, `quantity`)' . 
    +         'VALUES (?, ?, ?, ?, ?)'
    + )->execute([$user_id, $articul_id, $sharpener_id, $barcode, $quantity]);
    Ответ написан
    4 комментария
  • Что интересного можно сделать из промышленного ПК?

    @psiklop
    Удивляют, как только железный хлам, хоть не монетизирован, тогда пользу. С такими замашками дорога в блогеры, писать и снимать как очередной пыси теперь трудится и даже держит бота телеграм.
    Ответ написан
    Комментировать
  • Можно ли создать базу данных на одной таблице?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Да. Такие эксперименты были. Лет 5 назад когда был еще жив sql.ru, один человек продвигал
    модель т.н. квинтетов. Это таблица с 5 полями которая полностью описывала любую
    доменную область. Я к сожалению не могу нигде найти следов описания этой системы
    но возможно это оно https://cyclowiki.org/wiki/QDM . Читайте смотрите.

    Второе. В эпоху новых версий DBMS (Oracle/PG/MySQL) когда мы можем использовать
    JSON/XML внутри ячейки, сама идея EAV теряет смысл. Поле атомарно? Атомарно.
    Значит законы реляционной алгебры мы не нарушаем и JSON совершенно легальный
    тип для реляционок. Хотя лет 30 назад его использование было-бы кощунством
    в БД. Но это можно было списать на жесткую экономию ресурсов и чрезмерную
    математичность моделей Бойса-Кодда. Сегодня все используют JSON и нет никаких
    архитектурных доводов против. Поэтому создавайте NoSQL табличку где есть
    key и есть значение в виде либерального типа документа. Как делают MongoDb, CouchDb.
    И если связать их в иерархию то получится вполне себе те-же самые квинтеты.

    Про EAV лучше забудьте. Их любят преподаватели SQL и теоретики. Но практически EAV
    слишком медленно работает чтобы развивать его в бизнес-приложении или в промышленности.
    Мир тяготеет к упрощению. И поэтому JSON - это упрощение EAV. И работает быстрее.
    Ответ написан
    6 комментариев
  • Есть ли готовая среда для работы с базой PostgreSQL через Веб?

    Ох, вот меня и ударило ностальгией по голове... 20 лет назад, где-то, делал то же самое. MS Access был тогда прекрасной штукой. Задача была такой же, и выбора не было. Я взял как раз свеженький PHP 5-й версии, и относительно быстро решил этот вопрос. И вам советую сделать так же.

    Дело в том, что даже если вы найдёте какое-то универсальное решение, то я вам гарантирую, что вас постоянно будет что-то не устраивать, а через какое-то время заказчик захочет внедрить туда какую-то малюсенькую фичу, которой нет в этом инструменте... И всё... Приплыли.

    Поэтому, вам нужно знать магическое слово "CRUD" (Create, Remove, Update, Delete), и с этим словом выйти в интернет) В частности, можно ввести на YouTube что-то типа "crud за час", и вам выпадет огромный список видео. Там будут решения и на PHP, и на Python, и на других языках. Но PHP и Python - это то, что вам надо искать.

    Желаю вам всяческих успехов!

    P. S. Если не сможете в дизайн, закажите на фрилансе вёрстку ваших форм и списков за 20 копеек
    Ответ написан
    2 комментария
  • Как из объекта Bitrix\Crm\ItemIdentifier вытащить нужные данные?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    RTFM.
    getCategoryId
    getEntityId
    getEntityTypeId
    toArray
    Ответ написан
    4 комментария
  • Как из объекта Bitrix\Crm\ItemIdentifier вытащить нужные данные?

    IvanU7n
    @IvanU7n
    они приватные, достать их снаружи простыми способами нельзя
    но у этого объекта есть методы доступа, типа getEntityTypeId(), getEntityId() и т.п.
    Ответ написан
    Комментировать
  • Какой есть SSH клиент для Windows 10 с возможность отображать несколько терминалов в одном окне?

    Daemon23RUS
    @Daemon23RUS
    А создать 6 ярлыков религия не позволяет ?
    В PuTTY настройте подключение (этот пунк у Вас видимо уже выполнен)
    Добавьте авторизацию по ключу
    Добавьте имя пользователя в Connection/data (auto-login ...)
    Добавьте команду в connecton/SSH - htop (Remote command)
    Сохраните профиль.
    Скопируйте ярлык из пуска, допишите к пути в ярлыке -load "Имя сохраненного профиля"
    Повторите 6 раз для каждого сервера.
    Останется 6 раз кликнуть по разным ярлыкам и расположить окна как Вам удобно

    Это если уж сильно мониторить хочется через терминал, а так zabbix разверните, и всегда в курсе будете что с серверами, триггеры натроите он Вам в телегу алерты может слать.
    Ответ написан
    Комментировать
  • Почему в моем коде заменяется только одно значение, а не все?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    public function htmlStyles ($html) {
        $add = "";
        foreach ($this->_styles as $tag => $style) {
            $add .= "{$tag} \{{$style}\}\n";
        }
        return str_replace("</head>", "\n<style type='text/css'>\n{$add}</style>\n</head>", $html);
    }
    Ответ написан
    Комментировать
  • Почему в моем коде заменяется только одно значение, а не все?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Заменяя </head> вы как минимум уже получаете невалидный html
    Сделать можно так, при условии что у вас в $html есть </style> внутрь которого вы и хотите свои стили дописать
    foreach ($this->_styles as $tag => $style) {
        $styles = $tag . '{' .$style. '}'."\n";
        $html = str_replace('</style>', $styles.'</style>', $html);
    }
    Ответ написан
    Комментировать
  • Почему в WP ошибка Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 33554440 bytes)?

    @alexalexes
    while ($query->have_posts()) // вероятно, это всегда true
    {
    $result[] = [ // тут мы без конца наполняем массив - получаем переполнение памяти
                ];
    }
    Ответ написан
    Комментировать
  • Как найти первую стажировку или работу джуна по python?

    Maksim_64
    @Maksim_64
    Data Analyst
    1. Не нужно искать стажировку.
    С учетом что у тебя нет коммерческого опыта (шансы работа) / (шансы стажировка) > 1

    2. При поиске работы не нужно откликаться только на вакансии без опыта, откликайся на все ну и что, что у тебя будет автоматических отказов > 99 процентов, есть еще 1. Некоторые вакансии предполагают выполнение тестовых заданий. В некоторых вакансиях написано требуется опыт при этом зарплата сильно ниже рынка. Твоя первая задача это научится хоть какой-то фидбек получать от потенциального работодателя, созвон хотя бы. Стремись попасть на собеседование даже если у тебя нет шансов его пройти.

    3. Говори что официально не работал, но есть не официальный опыт. Сделай порфолио, что бы было что показать в резюме.

    С таким подходом на каждые 200 откликов твоя ожидаемая величина 2-5 потенциальных фидбека, 0-2 собеседования. Дальше, как справишься. Подводя итог, когда некое событие маловероятно то лучший рецепт это активность. Не нужно самому добровольно себя обесценивать. Скорее всего рынок заплатит тебе мало, но это совершенно не одно и тоже, когда ты сам, себя обесцениваешь подходом дайте шанс, я почти ничего не умею, но научусь и т.д. и т.п.
    Ответ написан
    1 комментарий