• Как запретить запуск скрипта по крону больше 1 раза?

    @Barmunk
    /usr/bin/flock -w 600 /var/tmp/myscript.lock /root/myscript.sh


    Эта комманда запустит /root/myscript.sh и создаст lock-файл для данного процесса. Пока он активен, новый вызов данного скрипта не произойдет.
    После завершения программы, блокировка файла снимается и процесс может быть снова запущен.
    Параметр -w 600 определяет время ожидания комманды flock на освобождение lock-файла.
    Для моментальной отмены выполнения процесса используйте параметр -w 0, для ожидания же бесконечно долгого времени параметр нужно опустить.


    https://pingtool.org/ru/using-flock-to-ensure-only...
    Ответ написан
    Комментировать
  • Как создать сайт для повышение уникальности текста?

    Awilum
    @Awilum
    Частный разработчик, ментор и преподаватель курсов
    Реально
    Ответ написан
    Комментировать
  • Можно ли передать POST запрос на 2 сраницы разом?

    @zkrvndm
    Софт для автоматизации
    Замени ссылку https://yoomoney.ru/quickpay/confirm.xml на свой собственный php обработчик. В этом php обработчике вытаскивай данные из массива $_POST и далее сохраняй их куда надо, а дальше отфутболивай пользователя дальше на оплату обычным редиректом на адрес https://yoomoney.ru/quickpay/confirm.xml и с кодом 307. Важно (!) надо именно этим кодом, чтобы тело и метод запроса при редиректе не менялись.
    Ответ написан
    6 комментариев
  • Как запретить открытие страницы без GET параметра?

    delphinpro
    @delphinpro Куратор тега PHP
    frontend developer
    if (! isset($_GET['id'])) {
        header('Location: /');
        die;
    }
    Ответ написан
    4 комментария
  • Почему выдает ошибку Uncaught Error: Call to a member function prepare() on null при передаче данных через ссылку?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Call to a member function prepare() on null
    Из ошибки очевидно что $db->dbs у вас нулл (не существует), дальше рассказывать или сами догадаетесь?
    Ответ написан
    6 комментариев
  • PHPWord - почему не работает сохранение в word файл?

    @Nentra Автор вопроса
    Всем спасибо, действительно нужно было логи посмотреть, в моём случае логи апача
    (у меня битрикс)
    /var/log/httpd/error_log.

    Проблема была с xmlwriter, дописал в файл

    /etc/php.d/20-xmlwriter.ini


    Enable xmlwriter extension module
    extension=xmlwriter.so


    Перезагрузил апач и всё заработало.
    Ответ написан
    Комментировать
  • Почему PHP так работает?

    @rPman
    режим pm какой в настройках? если не static то количество текущих процессов веб сервера будут зависеть от нагрузки, полагаю которую он считает по завершению каждого запроса, в динамическом режиме сначала выбран 1 процесс, поэтому у тебя отрабатывает только один запрос остальным некем обрабатываться, после чего php-fpm понимает чтонагрузка высокая и поднимает количество потоков до max_children и остальные запросы обрабатываются паралельно
    Ответ написан
    2 комментария
  • Почему проверка на сессию работает некорректно?

    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, проверять строгое равенство === с пустой строкой.
    Ответ написан
    Комментировать
  • Подразумевает ли PSR-3 класс logger'а прерывание выполнения при уровнях ниже warning?

    Rsa97
    @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 комментарий