• Как преобразовать несколько массивов php в один?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    $input = [
      [2, 'скрипт холодного звонка по продаже услуг'],
      [2, 'продажи в переписке'],
      [2, 'автоматизация отдела продаж'],
      [2, 'заказать скрипт продаж'],
      [3, 'доставка еды из ресторана'],
      [3, 'еда из ресторана на дом'],
      [3, 'доставка еды из ресторана на дом'],
      [4, 'доставка товаров из китая в россию'],
      [4, 'купить в китае с доставкой в россию'],
      [4, 'доставка запчастей из китая в россию'],
    ];
    
    $output = [];
    
    foreach($input as $item) {
      if (!array_key_exists($item[0], $output)) {
        $output[$item[0]] = [];
      }
      $output[$item[0]][] = $item[1];
    }
    
    $output = array_map(fn($item) => join(', ', $item), $output);
    
    var_dump($output);
    Ответ написан
    1 комментарий
  • Ошибка Allowed memory size of 4294967296 bytes exhausted (tried to allocate 81920 bytes)?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Исправить скрипт, чтобы ему для работы не требовалось 4 Gb оперативки.
    Ответ написан
    1 комментарий
  • Как забрать файлы из другой ветки?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Если нужно вытащить отдельные файлы из другой ветки, используйте checkout
    git checkout ветка -- путь/к/файлу
    Это извлечет файл в рабочий каталог. Останется только его закоммитить в текущей ветке.
    Ответ написан
    Комментировать
  • Как конвертировать GoogleMaps координаты в 2GIS координаты и наоборот?

    Aetae
    @Aetae Куратор тега JavaScript
    Тлен
    Преобразует любые на входе в универсальные:
    class CompatibleBounds {
      northEast = [0, 0];
      southWest = [0, 0];
    
      constructor(bounds) {
        Object.assign(this, bounds);
      }
    
      static new(bounds) {
        return new this(bounds);
      }
    
      get south(){ return this.southWest[1] }
      get west(){ return this.southWest[0] }
      get north(){ return this.northEast[1] }
      get east(){ return this.northEast[0] }
      set south(value){ this.southWest[1] = value }
      set west(value){ this.southWest[0] = value }
      set north(value){ this.northEast[1] = value }
      set east(value){ this.northEast[0] = value }
    }
    
    const compatibleBounds = CompatibleBounds.new({
      "south": 43.106491921792255,
      "west": 76.71745650634767,
      "north": 43.4065384633472,
      "east": 77.13974349365236
    });
    // или
    const compatibleBounds = CompatibleBounds.new({
      "northEast": [
        76.92894332280319,
        43.25695003829279
      ],
      "southWest": [
        76.92825667730312,
        43.256449960663694
      ]
    });
    
    // на выходе универсальный динамический объект:
    compatibleBounds.southWest = [1, 2];
    console.log(compatibleBounds.south); // 2
    
    compatibleBounds.south = 3
    console.log(compatibleBounds.southWest); // [1, 3]

    Но если действие требуется одноразовые, то лучше руками перегнать один раз.:)
    Ответ написан
    Комментировать
  • Как найти cron задачу?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    У вас задания выполняются от root'а.
    Смотрите в /etc/crontab, /etc/cron.d/* или в sudo crontab -l
    Ответ написан
    Комментировать
  • Как на нескольких сайтах WP сделать единую базу юзеров?

    vndrussia
    @vndrussia
    Вроде разработчик,а вроде и нет
    Самый простой варинат,это переписывать сис-му авторизации или же писать свой плагин,чтобы при вводе логина/пароля на авторизацию,проверяло данные пользователей с "главной базы" и если там есть такой пользователь проводить авторизацию.

    Либо же путем указывания констант в wp-config.php
    define( 'CUSTOM_USER_TABLE', $shared_table_prefix . 'my_users' );
    define( 'CUSTOM_USER_META_TABLE', $shared_table_prefix . 'my_usermeta' );

    https://wordpress.org/documentation/article/editin...
    Данная процедура нужна для обоих сайтов + создать сами таблицы.

    Дополняю статьей:
    https://wpmag.ru/2014/wordpress-multisite/
    И плагин:
    https://en-gb.wordpress.org/plugins/external-login/
    Ответ написан
  • Как настроить интернет экваринг от ВТБ в Битрикс?

    @koder_1
    Битрикс программист
    Писать разработчикам модуля и в банк.
    Ответ написан
    Комментировать
  • VCS в квадрате. Можно ли с помощью Git контролировать состояние другого Git-репозитория?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Нет, рекурсия работать не будет. Гит увидит, что внутри каталога лежит вложенный репозиторий и проигнорирует его. А в своей базе пометит этот подкаталог как поддерево (subtree), чтобы не сломать.

    Вы пытаетесь соорудить какой-то жуткий костыль только лишь потому, что поленились изучить инструмент, в котором работаете. Поэтому для вас Git сейчас представляется как некая шайтан-машина, которой вы скармливаете команды, которые не понимаете, и в результате получаете ещё более непонятные «неожиданные результаты». Просто потратьте несколько дней, чтобы изучить азы. Не зубрите непонятные команды, а постарайтесь понять логику гита. А она — эта логика предельно проста и гениальна.

    не является сложной задачей что-либо сломать в своем проекте

    Сломать что-то в гите довольно сложно. Вам может только показаться что всё сломалось, но это лишь потому, что вы не понимаете, что делаете.

    каким-то образом снес половину коммитов

    Коммиты в гите — это неизменяемые сущности. Можно лишь создать новые «на замену», но старые не исчезают. Коммиты невозможно удалить без специальных команд очистки мусора.
    Вам показалось что коммиты исчезли, но на самом деле они все остались в репозитории, вы просто их не видите в текущей ветке. Но всё легко откатывается назад, используя журнал Reflog.

    Поэтому было бы неплохо как-либо сохранять прошлые версии Git репозитория

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

    Мой вам совет: Пройдите 16 коротких бесплатных уроков и полу́чите просветление.
    Ответ написан
    2 комментария
  • Как определить зашифрована ли строка с помощью функции openssl_encrypt или не зашифрована?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Как определить зашифрована ли строка с помощью функции openssl_encrypt или не зашифрована?

    Такого метода вобщем-то нету. Но если openssl_encrypt возвращает строку в кодировке base64 - то эта строка будет
    иметь характерный "хвостик" в виде символов равно (padding) для добивания строки кратного байтам размера.
    И все прочие символы имеют равномерное (шумящее) распределение.

    Но если я прикольнулся и изначально положил в openssl_encrypt такую подобную вышеуказанной, то тогда
    нет возможности определить была она зашифрована, или я просто прикольнулся.
    Ответ написан
    Комментировать
  • Почему при удалении куки возникает ошибка Warning: Cannot modify header information?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    Ответ написан
    Комментировать
  • Чем отличается php код запускаемый cron от обычного php кода?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Ничем. Это, внезапно, тоже "обычный php код".
    А вот среда запуска отличается - например, в CLI режиме применяется отдельный php.ini.
    Ответ написан
    7 комментариев
  • Файл конфига php?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Очень хороший вопрос, только вы путаете файл с настройками и файл первоначальной настройки приложения.
    Вам нужны оба.
    1. файл c настройками
    Их должно быть два.
    Первый файл называется config.sample.php, он содержит только один массив, который заполняется пустыми/дефолтными значениями и может содержать не только настройки БД но и содержать другие секции:
    <?php
    return [
      'db' => [
        'hostname' => '',
        'username' => '',
        'password' => '',
        'database' => '',
      ],
    ];

    Этот файл добавляется в репозиторий.

    Второй файл называется config.php и он создается руками каждый раз при установке CMS на новом сервере. В него пишутся актуальные настройки для каждого сервера.
    Этот файл не добавляется в репозиторий (а добавляется, соответственно, в .gitignore).

    2. Файл первоначальной настройки приложения.
    В него идут команды, которые пишутся на любой странице: подключение к БД, старт сессии, всякие инклюды и прочее. Кроме того, в этом файле должен быть код
    if (!file_exists('config.php'))
     {
         $msg = 'Создайте файл config.php на основе config.sample.php и внесите в него настройки';
         throw new RuntimeException($msg);
     }


    Таким образом система будет помогать программисту, если он забыл создать config.php с актуальными для конкретного сервера настройками.

    И вот этот файл, назовем его init.php, уже и подключаем во все остальные файлы.

    Кстати, начиная с 8 версии РНР можно писать просто
    $conn = mysqli_connect(...$config['db']);
    В этом случае ключи массива $config['db'] будут использоваться в качестве имен параметров функции - очень удобно
    Ответ написан
    Комментировать
  • Что такое upstream в Git?

    sergey-kuznetsov
    @sergey-kuznetsov Куратор тега Git
    Автоматизатор
    Гит — это распределенная система. Мы можем иметь много равноправных репозиториев и обмениваться информацией между ними. Тот репозиторий, в который мы сейчас коммитим, будет локальным. А другие репозитории, в которые отправляем (push) или из которых получаем (fetch), они внешние (вышестоящие, upstream, remotely)
    Часто говорят удаленные, но это не очень уместный перевод слова remote в данном контексте. Потому что появляются странные формулировки типа «удалить удаленный»

    Именем upstream ещё принято обозначать исходный репозиторий, от которого мы сделали форк на GitHub, так как имя origin уже занято и указывает на форк. Поэтому адрес исходного репозитория, при необходимости, сохраняем в переменной upstream. В данном контексте это просто традиция, и назвать ссылки на внешние репозитории мы вольны как угодно. Команда git remote лишь создаёт переменные, в которых мы храним URL внешних репозиториев, чтобы затем использовать имя переменной в командах, вместо того, чтобы писать длинный URL.
    Ответ написан
    Комментировать
  • Почему не срабатывает querySelectorAll()?

    zkrvndm
    @zkrvndm
    Архитектор решений
    Это вам не jQuery) Надо в цикле перебрать все элементы массива и отдельно на каждый элемент навесить обработчик. Если хотите, чтобы по волшебству обработчик на все элементы сам приклеился, используйте jQuery.
    Ответ написан
    Комментировать
  • Как обойти капчу при при парсинге на PHP?

    Mike_Ro
    @Mike_Ro
    Python, JS, WordPress, SEO, Bots, Adversting
    Конструкция парсера незамысловата

    Вы действительно думали, что можно просто так прийти и 3 строчками кода спарсить ресурсы, где работают отдельные команды для того, чтобы их не парсили?

    Подскажите, пожалуйста, что можно сделать, чтобы спарсить информацию?

    Подключить сервис расшифровки капчи. С таким "незамысловатым" скриптом Вам придется достаточно часто пополнять счет этих сервисов :)
    На прокси можете не тратиться, ибо Вас будут ловить раньше :)
    Ответ написан
  • Как узнать с какого IP-адреса оставляют заявки пользователи с формы на сайте?

    Melkij
    @Melkij
    PostgreSQL DBA
    $_SERVER['REMOTE_ADDR']

    Возможны варианты конфигурации, при которых адрес клиента необходимо получить каким-то другим способом, а не из REMOTE_ADDR, в этих случаях следуйте инструкции хостера или вашей группы эксплуатации.
    Ответ написан
    Комментировать
  • Как лучше организовать структуру сайта по продаже плитки?

    @koder_1
    Битрикс программист
    Как-то и не понятно, в чём вопрос. Если в плане дизайна сайта, то делается два разных меню, в одном категории, в другом коллекции.
    Если про организацию структуры базы данных, то заводится еще сущность коллекция (вдруг захотите в коллекции выводить описание, сео-теги, заголовки),
    и в товаре привязка к коллекции. Страница коллекции это по сути описание коллекции и список товаров, отфильтрованных по полю коллекция.
    Ответ написан
    Комментировать
  • Зачем в данной функции нужны круглые скобки?

    XanXanXan
    @XanXanXan
    Чтобы фигурные скобки воспринимались как возврат объекта, а не как тело функции.
    Ответ написан
    Комментировать
  • Какое различие между этими функциями?

    Alexandre888
    @Alexandre888
    Javascript-разработчик
    1. «Function expression» https://learn.javascript.ru/function-expressions
    2. «Function declaration» https://learn.javascript.ru/function-basics

    о различиях по первой ссылке
    Ответ написан
    Комментировать
  • Как убрать отступ у кода и оставить только сам код?

    delphinpro
    @delphinpro
    frontend developer
    Вот так взять и убрать

    ...
                <code>
    Qua in vita tantum abest ut voluptates consectentur, etiam
        curas, sollicitudines, vigilias perferunt optimaque parte
      hominis, quae in nobis divina ducenda est, ingenii et mentis
            acie fruuntur nec voluptatem requirentes nec fugientes
       laborem.
    
      Modo etiam paulum ad dexteram de via declinavi, ut ad
    Pericli sepulcrum accederem.
    </code>
    Ответ написан
    2 комментария