• Шифрование уникальной ссылки для пользователя. Как реализовать?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Самое простое решение - шифрование. На первом сайте шифруете строку содержащую дату и время + имя файла + соль, получаете строку для урл. На втором сайте расшифровываете тем же ключом (ну или можно использовать асимметричный шифр и тогда ключ будет публичным на 2 сервере). Если дата не устарела (например время жизни ссылки ставите 1 час и проверяете разницу дат создания ссылки и текущего времени).
    Ответ написан
    Комментировать
  • Как узнать, сколько дней осталось до Нового Года?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    echo (new DateTimeImmutable('first day of January next year'))
        ->diff(new DateTimeImmutable())
        ->format('Осталось дней: %a');
    // Осталось дней: 151
    Ответ написан
    2 комментария
  • Как сбросить изменения в консоли Chrome?

    @Viktor719
    Столкнулся с аналогичной ситуацией. Помогло снятие галочки "Разрешить локальное переопределение" в настройках DevTools.
    66acf7c4d9ef5028347253.png
    Ответ написан
    Комментировать
  • Как сбросить изменения в консоли Chrome?

    Dobro2016
    @Dobro2016
    Заканчиваю обучение, ищу стажировку или работу.
    Все предложенные выше варианты не работают, я бы сказал эти ответы совсем не про этот вопрос.
    При изменении стилей в DevTools GoogleChrome на некоторых сайтах, сколько не чисти и не работай с кэшем, всё равно при открытии DevTools все стили которые менялись в DevTools когда либо сразу применяются.
    Мне помогла только переустановка браузера!
    Ответ написан
    Комментировать
  • Можно ли такое реализовать с помощью MySQL?

    @KingstonKMS
    1. Если полей для разных типов не много, то можно сделать все в одной таблице. Но это, как написали, денормализованный вариант.
    2. Отдельные связанные таблицы для хранения параметров разных типов оптимальный вариант с учётом возможного увеличения как параметров, так и типов аккаунтов.
    3. Но вы можете и json хранить в базе, осуществлять поиск и индексацию, см. https://dev.mysql.com/doc/refman/8.0/en/json.html
    Ответ написан
    3 комментария
  • Как начать писать собственный API?

    yesbro
    @yesbro
    Думаю, помогаю думать
    Для начала напиши документацию на апи. Какие методы будут, по каким протоколом (GET|POST|DELETE|PUT|PATCH) надо обращаться. Какие параметры передадаются. Какие данные будут в ответе, в какой формат. Можешь прям сделать примеры. Плюс еще надо какие ошибки будет возвращать твой апи.

    После этого станет намного проще :)
    Ответ написан
    8 комментариев
  • Разыскивается микроконтроллер... (хорошо, вот знак вопроса)?

    @evgeniy_lm
    Таких не бывает.
    Есть модуль реле для ESP01. Китайцы продают как отдельные модули так и комплекты с ESP. Само собой к нему нужно питание 5В
    Есть готовые WiFi розетки и WiFi выключатели, но цены на них совсем другие
    Ответ написан
    Комментировать
  • Как залить на сервер сайт с бекендом?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Есть — примерно все остальные хостинги на свете.
    Ответ написан
  • Какую архитектуру выбрать для сайта объявлений?

    @jazzus
    Таблица users содержит только поля пользователей.
    Таблица companies содержит только поля компаний и + поле user_id для связи с пользователями.
    Юзеров связываем с компаниями c помощью связи hasMany (имеет много). Т.к. пользователь может иметь много компаний. Если непонятно гугли hasMany.
    Объявление публикует юзер, делаешь поле в форме - "От компании" и выбор компаний пользователя из списка.
    Таким образом у тебя пользователь может публиковать и от себя, как физлица, и от любой своей компании.
    Ну а в самом объявлении проверяешь, заполнено ли поле "От компании" и если заполнено то показываешь данные компании.
    Ответ написан
    Комментировать
  • Можно ли писать бэк на C#, а фронт на React и есть ли в этом смысл?

    Sputterspark
    @Sputterspark
    И чему в этих ВУЗах учат? В подавляющем большинстве случаев клиент и сервер не знают на чём другой написан и им пофиг так как общаются они по стандартизированному протоколу, в случае web-разработки по HTTP.
    Ответ написан
    3 комментария
  • Есть разница: передам я в метод класса большой массив или предварительно сделаю из него выборку и передам только его небольшой фрагмент?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Массивы в РНР передаются методом copy-on-write.
    Это означает, что потребление памяти вырастет только в том случае, если массив внутри функции будет изменён.
    Соответственно, если переданный массив будет изменяться, то лучше вырезать.
    Если будет только читаться, то проще передать целиком.
    Ответ написан
    2 комментария
  • Как хранить логи приложения на php?

    Adamos
    @Adamos
    Альтернатива БД, если лог именно и только для разработчика.
    class Logger
    {
    	private $logfile;
    	private function __construct()
    	{}
    	public function __destruct()
    	{
    		$this->log('');
    		fclose($this->logfile);
    	}
    	public function log($string)
    	{
    		fwrite($this->logfile, $string . "\n");
    		fflush($this->logfile);
    	}
        static public function getCommon($tag)
        {
            $logDir = base_path() . '/../logs/' . $tag; // это в Ларавели, без нее $_SERVER['DOCUMENT_ROOT'] или абсолютный путь (если должно работать в консоли/кроне)
            if(!file_exists($logDir)) {
                mkdir($logDir);
            }
            $logger = new Logger();
            $logger->logfile = fopen($logDir . '/' . date('Y-m-d') . '.log', 'at');
            $logger->log(date('Y-m-d H:i:s') . "\n");
            return $logger;
        }
    }

    Выше корня проекта - папка logs, в ней по подпапкам (определяется в конструкторе логгера) разложены логи того, что происходит. Имя файла сегодняшнего лога - текущая дата, так что легко настраивается чистка по крону и элементарно ищется информация за нужный день.
    Да, это колхоз, нестандарт и животноводство. Но пользоваться этим удобно. Во всяком случае, мне.
    Ответ написан
    2 комментария
  • Как объединить данные в двумерном массиве?

    0xD34F
    @0xD34F
    $grouped = array_values(array_reduce($arr, function($acc, $n) {
      $acc[$n[0]] ??= [ $n[0] ];
      array_push($acc[$n[0]], ...array_slice($n, 1));
      return $acc;
    }, []));
    Ответ написан
    Комментировать
  • Как выбирать последующие записи в SQL?

    bingo347
    @bingo347
    Crazy on performance...
    Помимо описанных в других ответах LIMIT и OFFSET есть еще такая вещь как курсор.
    Курсор позволяет читать строки по одной, но требует открытого соединения с СУБД.
    На самом деле большинство СУБД в ответ на запрос возвращают именно курсор, просто функции из библиотеки, которая работает с СУБД, вычитывают курсор до конца, если смысл таких функций вернуть массив строк из результата запроса.
    Курсор штука ленивая, то есть поиск следующей строки СУБД будет делать только в тот момент, когда у нее попросят следующую строку для курсора.
    В случае если у нас есть постоянный коннект к СУБД, вариант запросить сразу все и потом дергать курсор понемногу будет работать быстрее чем множество запросов с LIMIT, так как СУБД будет лишь единожды анализировать запрос, подбирать подходящие для него индексы и т.д.

    То есть в Вашем случае нужно сначала понять, можно ли гарантированно поддерживать коннект к СУБД между ивентами.
    Если да, то отправляете в СУБД запрос и получаете курсор перед подпиской на ивент, а в хендлере самого ивента уже дергаете курсор по 5 раз.
    Если нет, то на каждый ивент отправляете запрос с LIMIT и OFFSET.
    Ответ написан
    Комментировать
  • Как отсортировать запрос с UNION?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Если отформатировать запрос, то он выглядит так:
    SELECT * FROM `rsi` WHERE `tf`='4h'                         UNION 
    SELECT * FROM `rsi` WHERE `tf`='15m'                        UNION 
    SELECT * FROM `rsi` WHERE `tf`='4h'                         UNION 
    SELECT * FROM `rsi` WHERE `situation`='perek' AND `tf`='1d' UNION 
    SELECT * FROM `rsi`                                         UNION 
    
    SELECT * FROM `levels` WHERE `situation`='support' AND `tf`='4h' UNION 
    SELECT * FROM `levels` WHERE `tf`='1h' 
    
    ORDER BY `time` DESC LIMIT 0,20

    Сразу видно, что первые 4 подзапроса можно смело удалить.
    А потом надо смотреть на структуру таблицы rsi, ибо именно из неё будут взяты имена полей объединённого набора записей. Судя по ошибке, там просто нет поля time.
    Ответ написан
    1 комментарий
  • Как добавить только последний коммит (из нескольких)?

    @Akela_wolf
    Extreme Programmer
    Git book - для общего понимания что из себя представляет гит

    cherry-pick решает вашу проблему
    Ответ написан
    1 комментарий
  • Как связать ветки git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    А чтобы связать ветки используется такая команда
    git branch --set-upstream-to=<внешний-репозиторий>/<внешняя-ветка> <локальная-ветка>

    ---------
    Но ты всё усложняешь. Если зачем-то вручную создал ветку, то и связь настроить придётся руками. Из вопроса не до конца понятно, что конкретно ты сделал. Предположу что ты клонировал на сервер свой репозиторий.
    git clone <URL>
    Такая команда автоматически создаст remote с именем origin в которой будет храниться URL вышестоящего репозитория, распакует главную ветку origin/main в локальную ветку main и сразу создаст связь между ними.

    Ты хочешь распаковать какую-то другую ветку и делаешь это сложным путем?
    git branch feature # создать пустую ветку с именем feature
    git switch feature # переключиться в эту новую ветку
    # но свежесозданная ветка не связана ни с какой внешней, поэтому следующей командой
    # придётся указать откуда и что скачивать
    git pull origin feature # влить внешнюю ветку origin/feature в текущую локальную ветку
    # но проще ветки сначала связать
    git  branch --set-upstream-to=origin/feature feature
    # и тогда заработает простой pull
    git pull

    Но тебе всё это не нужно на самом деле!
    Достаточно после клонирования просто написать
    git switch origin/feature

    Одна строчка сделает всё вышеперечисленное. Создаст локально ветку с таким же именем, распакует в неё содержимое внешней ветки и создаст связь между локальной и внешней веткой.
    Если потом, находясь в этой ветке, выполнишь короткую команду git pull, то увидишь что всё связано и скачивается откуда надо.

    И даже можно сделать ещё проще. Уже во время клонирования сразу распаковать нужную ветку.
    git clone --branch feature <URL>
    Ответ написан
    1 комментарий
  • Как реализовать курс валюты на сайте?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    держите не все про это знают
    www.cbr.ru/development/sxml
    Ответ написан
    2 комментария