Задать вопрос
  • Почему проверка на сессию работает некорректно?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    потому что опечатка
    $_SEESION['user']
    $_SESSION['user']
    Ответ написан
    Комментировать
  • Как лучше проверять строку на пустоту в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Недостатки исходных вариантов проверки:
    $str = "0";  // непустая строка, содержащая цифру ноль
    if (!$str) echo "bool false\n"; // сработает
    if (empty($str)) echo "is empty\n"; // сработает
    
    $str = null; // не строка
    if ($str == "") echo "equals empty str\n"; // сработает
    if (strlen($str) === 0) echo "zero length str\n"; // сработает


    Поэтому лучший вариант, как и предложил Rsa97, проверять строгое равенство === с пустой строкой.
    Ответ написан
    Комментировать
  • Импорт большого yml в mysql?

    @rPman
    как импортируешь то? ты в свой скрипт не можешь вставить sleep между запросами?

    львиную долю нагрузки базе данных на запись создают:
    1. поддержка транзакций
    2. перестройка индексов
    3. средства защиты данных от сбоев
    каждая запись на диск, которая по мнению базы данных должна быть произведена с гарантией, т.е. снабжается вызовом flush, но база данных не всегда знает когда это стоит делать а когда нет, частично это разруливается длинными транзакциями, вставляя между коммитами 100500 запросов на вставку

    Так вот по каждому пункту можно временно изменить логику и настройки работы базы данных.
    1. отключить транзакционные механизмы, перейдя от innodb к myisam, это может дать чуть ли не двухкратный прирост, но потребует в приложении как то игнорировать отсутствие поддержки транзакций, что не всегда просто сделать
    2. отключить индексы, буквально, оставить только PK и то только там где это имеет необходимость только для импорта, после окончании импорта данных, индексы нужно будет вернуть. Однократное создание индексов на порядок если не два быстрее чем обновление индексов по каждой записи в базу.
    3. отключить поддержку flush в операционной системе, буквально например опция монтирования ext4 data=writeback, база данных не будет ждать когда данные реально будут записаны на диск (есть еще опция O_DSYNC у mysql innodb, совет вообще полистать как тюнить дисковый io) но осторожно, если в это время произойдет краш сервера, данные будут испорчены, причем скорее всего безнадежно. В догонку, можно перенести журнал ext4 на другое более быстрое устройство или лучше совсем его отключить, так как при записи данные пишутся сначала в него потом на диск, на время импорта это лишние операции
    И в догонку, если размер базы данных к примеру считанные сотня гигабайт, то можно временно арендовать в облаке машину с большим объемом RAM, залить базу в tmpfs и на максимально быстрой скорости импортировать данные, потом готовую базу залить обратно.

    т.е. данные действия позволят, остановив работу (без этого никак) провести импорт максимально быстро и восстановить работу, пол миллиона записей это мизерный объем и если что то тормозит то исключительно из-за плохой архитектуры или реализации
    Ответ написан
    3 комментария
  • Как корректно использовать exec() в PHP?

    @Akela_wolf
    Extreme Programmer
    Утилита screen нужна только для терминала (чтобы процесс не убился когда закроете терминал)
    Команда cd - команда шелла (изменить текущую директорию)

    Так что вам, на самом деле, нужна единственная команда для запуска сервера: srv/start.sh

    Если же все-таки нужно выполнить несколько команд, то для этого нужен запуск шелла: /bin/sh -c 'cmd1 && cmd2 && cmd3 && ... etc ...'

    Еще можете посмотреть функцию PHP shell_exec
    Ответ написан
    Комментировать
  • Область видимости метода?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    В пхп классо-ориентированный дизайн —потому "внутри класса" доступно даже приватное состояние другого объекта, если у него тот же тип. То есть инкапсуляция в «схеме» объекта — в классе, а не у самого объекта

    Пример:

    class Bro {
         public function __construct(
               private string $name,
         ){}
    
         public function changeBro(Bro $bro) {
               $bro->name = 'я думал ты бро, а ты не бро';
         }
    }
    
    $maks = new Bro('Макс');
    $roma = new Bro('Рома');
    
    $roma->changeBro($maks);
    
    // теперь у Макса имя другое :)


    такая архитектура языка, объекты разные, а доступ есть
    К слову, это удобная фича… можно сравнить с видимостью в контексте одного package в го :)

    Ну а касательно иерархии типов вам выше накинули — ребёнок всегда является корректным родительским типом, это называю ковариативностью. Любой тигр — кошачьи, а кошачьи — животное, всегда — согласно иерархии типов
    Ответ написан
    Комментировать
  • Можно ли дешифровать md5?

    Sanes
    @Sanes
    Это хеш, его нельзя дешифровать. Есть словари, где может быть ваше слово.
    Ответ написан
    Комментировать
  • Node + pg. Как вставить множество строк в таблицу?

    Alexandroppolus
    @Alexandroppolus
    кодир
    как-то так

    await pool.query(
      `INSERT INTO public.orders(id, status, type, time) \
      SELECT unnest(array[%1]), unnest(array[%2]), unnest(array[%3]), unnest(array[%4])`,
      [
        data.map(item => item.id),
        data.map(item => item.status),
        data.map(item => item.type),
        data.map(item => item.time),
      ]
    )
    Ответ написан
    1 комментарий
  • Не поучается вывести шаблоны.?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну учитывая, что после прошлого вопроса человек начал делать хоть что-то, то грех не помочь.

    При написании кода необходимо действовать осмысленно.
    Не просто накидывать подсмотренные где-то команды в случайном порядке, а разбираться, что они делают.
    К примеру, вот использовали мы команду ob_start();
    Очень хорошо! Теперь надо подумать - зачем. И что с ней делать дальше.
    В этом нам поможет документация. переходим по ссылке php.net/ob_start
    Здесь я дам подсказку: можно промотать до списка похожих функций. И там сразу будет нужное.

    А еще один косяк, чисто логический, я думаю вполне получится исправить самостоятельно
    Ответ написан
    Комментировать
  • Как узнать максимальное количество одновременно выполняемых процессов?

    karabanov
    @karabanov
    Системный администратор
    Если используется mpm_worker то в конфиге найти и изменить следующие директивы:
    <IfModule mpm_worker_module>
            StartServers             2
            MinSpareThreads          25
            MaxSpareThreads          75
            ThreadLimit              64
            ThreadsPerChild          25
            MaxRequestWorkers        150
            MaxConnectionsPerChild   0
    </IfModule>

    Если используется mpm_prefork то в конфиге найти и изменить следующие директивы:
    <IfModule mpm_prefork_module>
            StartServers             5
            MinSpareServers          5
            MaxSpareServers          10
            MaxRequestWorkers        150
            MaxConnectionsPerChild   1024
    </IfModule>
    Ответ написан
    Комментировать
  • Как отправить с помощью mailer письмо, с нужной мне почты?

    jamessvetsky
    @jamessvetsky
    Специалист по почтам и рассылкам
    Насколько я вижу, mail1 не проходит авторизацию, скорее всего надо либо в настройках включить портальный пароль (это они так обычный назвали) либо использовать пароли приложений
    6227aa4a31f74817391392.jpeg

    Но вообще очень плохой вариант. С одной стороны яндекс может блочить отправку через свой SMTP, подробнее писал в этой статейке
    https://7fk.ru/nastroyka-smtp/
    С другой стороны отправка через mail1 с полем from mail2 будет всеми почтовиками восприниматься как спуффинг и письма далеко не везде попадут даже в папку спам
    Ответ написан
    2 комментария
  • Как правильно организовать работу серверов?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    1. API
    2. Сервера могут общаться через базу данных
    3. Сервера могут общаться через брокер очередей
    4. Можно подумать насчет общего стораджа - S3, распределенная файловая система, просто сетевой диск замапленный на каждый сервер.

    Вопрос не в том, чтобы "как связать", вопрос зачем вам это надо, как вы себе представляете "связывание" и какая у него цель?
    Ответ написан
    1 комментарий
  • Какой использовать плагин для счетчика кликов / заказов на wordpress?

    san_jorich
    @san_jorich
    Творческий кодер
    Можно написать самостоятельно Примерно строк 10-15 и все заработает.
    1)Регистрируйте настройку "Количество заков"
    2)Подключаете jQuery скрипт который при клике на кнопь ajax-ом командует php увиличить переменную опции на 1
    3) Шоткодом выводите в нужное место шаблона результат
    4) Наслаждаетесь результатом
    Ответ написан
    5 комментариев
  • Как рассчитать "реальное" среднее время трека в наборе?

    usdglander
    @usdglander
    Yipee-ki-yay
    Вам нужно медиана?
    Ответ написан
    Комментировать
  • Как вывести сплошной текст построчно?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    JSON_PRETTY_PRINT
    https://www.php.net/manual/ru/function.json-encode.php

    json_encode($var, JSON_PRETTY_PRINT);
    Ответ написан
    1 комментарий
  • Где лучше хранить проверочный смс код?

    Zhbert
    @Zhbert
    Technical Writer, Linux user
    Ну я даже не знаю. Там же, где и все остальное, в базе данных? Ну или где ты там хранишь всю остальную инфу.
    Ответ написан
    6 комментариев
  • Как принять данные при POST запросе через php://input?

    zkrvndm
    @zkrvndm
    Архитектор решений
    При отправке FormData поток php://input автоматом очищается во время формирования $_POST, такое поведение конечно же можно отключить, но это кастрирует ваш сервер и массив $_POST просто перестанет формироваться при получении данных. Вы бы лучше написали зачем именно вам это надо, а там видно будет, вдруг вы изобретаете велосипед.
    Ответ написан
    Комментировать
  • Можно ли через CURL получить имя файла без скачивания?

    Ответ написан
    Комментировать
  • Как вывести кнопки в одно сообщение?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Зачем в цикле на каждую кнопку отправлять отдельное сообщение? Надо сначала в цикле сформировать клавиатуру, а потом отправить одно сообщение.

    spoiler
    С node.js не умею, вот простейший пример на python для понимания принципа:
    keyboard = types.InlineKeyboardMarkup()
    for b in buttons:
      keyboard.add(types.InlineKeyboardButton(text=b, callback_data=b))
    bot.send_message(message.chat.id, "Кнопачки", reply_markup=keyboard)
    Ответ написан
    Комментировать