Задать вопрос
  • Не работает локализация setlocale в PHP?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    $fmt = new IntlDateFormatter(
        locale: "ru_RU",
        timezone: 'Europe/Moscow',
        pattern: 'EEEE, d MMMM yyyy'
    );
    print $fmt->format(new DateTimeImmutable());
    // суббота, 6 мая 2023
    Ответ написан
    Комментировать
  • Почему не работает ajax?

    DanArst
    @DanArst Куратор тега JavaScript
    Гриффиндор в моде при любой погоде!
    Потому что в js у вас data - это якобы массив, хотя с обработчика вы возвращаете всегда строку.
    Как вариант в обработчике измените код на следующий везде, где возвращаете результат:
    $result = array();
    if (!$stmt->rowCount()) {
        $result['error_login'] = "Пользователь с такими данными не зарегистрирован";
        echo json_encode($result, JSON_UNESCAPED_UNICODE);
    }
    ...
    $_SESSION['user_id'] = $user['id'];
    $result['us3r_id'] = $_SESSION['user_id'];
    echo json_encode($result, JSON_UNESCAPED_UNICODE);


    И добавьте в AJAX-запрос параметр dataType: "json"

    p.s отслеживайте, что передается и что возвращается в DevTools во вкладке Network, а не Console
    Ответ написан
    1 комментарий
  • Как сделать рандомное число без повторений при вызове функции?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Если вы хорошо подумаете, вы поймёте, что это практически тоже самое, что просто взять список уникальных значений, случайным образом перемешать его и вывести. Никакой принципиальной разницы по результату нет. Тогда зачем все усложнять? Шафл решит вашу проблему.
    Ответ написан
    4 комментария
  • Сколько места доступно докер контейнеру на linux?

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

    Maksim_64
    @Maksim_64
    Data Analyst
    Бинарная классификация, подразумевает два варианта пост на IT тематику (True) или (False). Соответственно, только первый вариант, если учебный дата сет не будет содержать разных постов, то обучаться будет не на чем.

    Насчет пропорций, здесь интереснее. И так в реальности мы имеем куда более вероятное событие пост не IT чем IT. Но при создании модели нам нужно что бы наши пропорции были примерно равны или около того. Иначе мы будем иметь то что называется bias. У нас например в тренировочном сете значительно больше постов которые не IT и соответственно, мы уже имеем ПРЕДРАСПОЛОЖЕННОСТЬ. Что плохо. По этому изначально, для классификатора, не должно быть такого понятия, как НЕ IT пост более вероятен.

    Это общее правило с которого могут быть ответвления, например, когда есть датасет в котором одного класса сильно больше делают еще одну выборку с весами (resampling), то есть выбирают не с равными вероятностями. И потом получают близкое к равное распределение.

    В каких то случаях (редко) допускается и отклонения от этого правила, на уровне инженерных причин. Но стартовые позиции, как я описал выше.
    Ответ написан
    Комментировать
  • Как получить результат fetch в переменную?

    Stalker_RED
    @Stalker_RED
    Вам нужно дождаться когда вместо промиса будет результат.
    const jsonData = await getCategories()...
    Ответ написан
  • Почему появляются со временем ошибки в vendor'е Laravel?

    Sanes
    @Sanes
    Похоже на проблему с файловой системой. Может с правами что-то не так.
    Ответ написан
    Комментировать
  • Как узнать длительность mp3- файла без чтения всего содержимого файла в Node.js?

    Stalker_RED
    @Stalker_RED
    В некоторых записях ОПЦИОНАЛЬНО может быть длительность в id3 тегах. И вы сами можете туда дописать, если у вас эти файлы не на один раз.

    Для записей с фиксированный битрейтом можно кол-во фреймов перемножить на битрейт.

    Для VBR, которых большинство, придётся смотреть длительность в каждом фрейме и суммировать.
    Ответ написан
    Комментировать
  • Как добавить к тексту слово, после последнего совпадения через sed?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    Необходимо добавить после ips_addr_1 слово ips_addr_2, нужно чтобы было совпадение по последнему слову

    sed 's/\(.*ips_addr_[0-9]\)/\1 ips_addr_2/'
    Ответ написан
    Комментировать
  • Почему может создаваться большое количество файлов сессий на сервере Ubuntu?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Сессии сами не создаются, их создает РНР при обращении к сайту.
    Сколько обращений - столько сессий.

    Соответственно, смотреть надо по двум направлениям
    1. проверить, не долбит ли кто-то запросами, и заблокировать или ограничить, например использовать Rate Limit у NGINX
    2. файловая система - самое убогое хранилище для сессий, и используется по умолчанию только потому, что для всех других нужно указывать параметры подключения. Соответственно, вместо файлов использовать базу данных.

    Плюс надо смотреть по коду. Если сайт создает сессию на откровенно мусорный запрос, то, возможно, этого не стоит делать. Ну и нельзя сбрасывать со счетов гениальных скриптописателей, которые сами себе создают нагрузку на сайт. Не раз и не два я видел любителей инклюдить локальные файлы по HTTP.
    Ответ написан
    Комментировать
  • Как посчитать сумму позиций из 2-х источников?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    В общем случае избежать "цикла в цикле" позволяет использование индексации массива идентификатором и - соответственно - обращение по индексу вместо перебора.
    В данном случае вторую коллекцию проиндексировать можно с помощью метода keyBy('id');

    И тогда останется только один цикл по первому массиву, в котором обращаться ко второму по id.
    То есть сложность будет длина массива * 2 вместо длина массива * длина массива

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

    spoiler
    Типичный, кстати, вопрос из серии "Выучил ларавель, не выучил программировать"
    Ответ написан
    7 комментариев
  • Есть ли софт чтобы локальные ноутбук из-под NAT торчал наружу в веб, используя статический IP?

    @dronmaxman
    VoIP Administrator
    Если для тестов, то можно использовать ngrok в бесплатном тарифе.
    Ответ написан
    3 комментария
  • Ошибка Битрикс при переносе сайта на хостинг через резервную копию?

    Adamos
    @Adamos
    Судя по путям, папка vendor лежит вне корня сайта, и Битрикс ее не бэкапил вовсе.
    Собственно, ее, скорее всего, должен заполнять и обрабатывать Composer.
    Ответ написан
  • Почему не удается получить доступ к смещению типа string в строке?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Потому что у строки не может быть строкового смещения.

    В ответе выше написана чушь.
    Обращаться к строке по индексу можно. И в РНР7, и в РНР 8. Без всяких предупреждений.
    К отдельным байтам (но не символам) в строке можно обращаться, указывая смещение в квадратных скобках:
    echo 'hello'[0];
    Но в сообщении об ошибке говорится конкретно про строковые ключи. А это уже действительно бессмыслица, никаких строковых смещений в строке быть не может. Что и написано черным по белому в ошибке.

    И проблема действительно находится выше, в совершенно дурацком присвоении пустой строки массиву.
    Если мы хотим использовать массив, то и присваивать начальное значение надо в виде пустого массива, а не строки.

    При этом отдельно проверять наличие $aUnit[$server['unit']] и $aUnit[$server['unit']][$server['game']] не нужно. Достаточно проверить на существование сразу конечный элемент.
    В 8.2 это можно красиво написать одной строчкой
    $aUnit[$server['unit']][$server['game']] ??= '';
    Но если почитать код дальше, то станет видно, что и здесь нам строка тоже не нужна. А снова нужен массив.
    Потому что в коде ниже эта строка разбивается через explode(???).
    То есть, надо написать
    $aUnit[$server['unit']][$server['game']] ??= [];
    $aUnit[$server['unit']][$server['game']][] = $server['id'];
    А ниже выкинуть всё от explode() до unset()
    spoiler
    Вообще, складывается ощущение, что исходный код писал либо ребенок, либо шизофреник - две разные личности, которые не видят код друг друга. Вот как с этим массивом например.
    Или вот этот кусок кода еще мне очень понравился
    $sql->query('SELECT `id` FROM `servers` LIMIT 1');
    if(!$sql->num())
        return NULL;
    $sql->query('SELECT `id`, `unit`, `game` FROM `servers` ORDER BY `unit` DESC');
    $all = $sql->num();

    Напоминает анекдот про ирландца, который перед тем как поспорить, выпьет ли он 10 кружек пива, сначала сбегал в соседний паб. Проверить, выпьет ли он 10 кружек пива.
    Ответ написан
    Комментировать
  • Как правильно разворачивать проект локально, написанный на php?

    Stalker_RED
    @Stalker_RED
    То что вы видите - не ошибка.

    В конфиге сервера нужно указать точку входа, скорее всего в вашем проекте это main.php
    Ответ написан
    Комментировать
  • Чем заменить установку переменных окружения Apache?

    Lynn
    @Lynn
    nginx, js, css
    Третий вариант, задавать переменные через map

    map $uri $APP_SETTINGS {
      default "";
      ~^/path1/ app-settings-12;
      ~^/path2/ app-settings-100500;
    }
    
    server {
      location ~\.php$ {
        fastcgi_pass ...;
        fastcgi_param APP_SETTINGS $APP_SETTINGS if_not_empty;
        ...
      }
    }
    Ответ написан
    Комментировать
  • Как заменить большое кол-во символов на другое?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Заменять хешированные пароли на дехешированные можно при помощи замены. В базах данные это UPDATE.

    P.S. Каков вопрос - таков и ответ, ни больше, ни меньше!
    Ответ написан
    Комментировать
  • Чей ip адрес адрес будет приходить?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    Конечно IP-адрес удалённого сервера, с которого создалось соединение. Посетитель удалённого сервера к такому соединению имеет отношение только в том, что соединение создаётся для получения данных для этого посетителя.
    Ответ написан
    Комментировать
  • Как на PHP разделить склеенные буквы разного регистра?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Нужно не "разделять буквы разного регистра", а нормально обрабатывать разметку.
    Если в разметке были символы переноса строки в виде html-сущностей (<br>), то нужно выполнить их преобразование до вызова функции strip_tags:
    preg_replace('/\<br(\s*)?\/?\>/i', "\n", $string);
    Ответ написан
    1 комментарий