Задать вопрос
  • Переподключение PHP к MySQL как правильно организовать?

    @vivaldy Автор вопроса
    • касательно собаки - абсолютно верно, не обратил внимания
    • почему лучше ловить \mysqli_sql_exception в чем выигрыш?
    • насчет die - полностью согласен - при тестировании мне так было удобнее
    • насчет подготовленных запросов - не понял как они связаны с переподключением?


    Относительно подготовленных запросов:
    1. можно код писать используя лишь query, используя следующие запросы:
    PREPARE stmt FROM 'SELECT ....
    SET @a = ...
    SET @b = ...
    EXECUTE stmt.....
    2. Соглашусь, что в рамках демона, подготовленные запросы имеют смысл, так как одни и те же запросы исполняются многократно, бывают еще различные обработчики, парсеры, которые в циклах что либо выполняют при этом можно получить оптимизацию нагрузки на сервер. И да, при переподключении если пакет собран без флага MYSQLI_NO_CHANGE_USER_ON_PCONNECT то PREPARE нужно выполнять повторно, об этом функционале я сейчас и думаю. Но это исключительно частные случаи.
    Стандартный сайт, да и большая часть любого правильно написанного кода одни и те же запросы исполняет 1-2 раза. Если сравнить стоимость одного query и стоимость prepare, set и execute то второй подход будет дороже. Если же вы относительно защиты от sql-инъекций - то она реализована на другом уровне.
    Написано
  • Переподключение PHP к MySQL как правильно организовать?

    @vivaldy Автор вопроса
    В данном случае это демон для вебсокета - он работает постоянно. Пока есть клиенты - он активен и постоянно обращается к БД.
    Настройка wait_timeout стоит на 8 часов ожидания плюс пока велась разработка он часто рестартовался.
    Однако во время эксплуатации стало заметно что каждое утро вебсокет недоступен, перезапуск сервиса его воскрешает, однако следующим утром опять идентичная ситуация.

    Стал курить логи и нашел "Mysql server gone away" и понял, что надо восстанавливать подключение. Однако трактование документации сначала запутало. Отсюда и данный вопрос.

    Применительно к данной ситуации - отключение не хорошая практика, так как подключение очень дорогостоящая операция. Как следствие в какой момент отключаться и подключаться - не понятно.

    Потому, я согласен, что лучше анализировать исключения и при необходимости подключаться заново.
    Написано
  • Переподключение PHP к MySQL как правильно организовать?

    @vivaldy Автор вопроса
    Спасибо, реализовал именно как вы и посоветовали:
    try {
    	$result = parent::query($query);
    } catch (\Exception $e) {
    	$error_message = $e->getMessage();
    
    	if (str_contains($error_message, 'gone away')) {
    		parent::__construct($host, $user, $pass, $base, $port);
    	
    		$result = @parent::query($query);
    	} else
    		die('Error: ' . $error_message);
    }


    на время тестов wait_timeout - снизил, убедился что все работает и поднял значение.
    Написано
  • Почему изображение в Viber появляется только со второго раза?

    @vivaldy Автор вопроса
    Проблема решилась в переписке с саппортом Viber, за что им огромное спасибо, не ожидал.

    Проблема была в генерировании изображений, которое происходит на лету движком
    Если изображения нет, то оно создается на сервере и после чего отправляется клиенту, но не передается Content-length, из-за чего и происходит такой сбой. После добавления данного параметра - все стало нормально.
  • Как лучше формировать большие и сложные документы Excel?

    @vivaldy Автор вопроса
    Николай Чуприк, вообще интересно конечно - попробую глянуть, отпишусь
  • Как лучше формировать большие и сложные документы Excel?

    @vivaldy Автор вопроса
    Одиночка Айс, смысл я увидел в том, что основное время и память расходуется именно на вставке картинок и применении стилей ячеек.
    Сейчас дабы отстроить документ и не улететь с ошибкой о нехватки памяти или времени я в настройках php-fpm указываю
    max_execution_time = 1000
    memory_limit = 512M
  • Как лучше формировать большие и сложные документы Excel?

    @vivaldy Автор вопроса
    Николай Чуприк, Да я с этим форматом тоже работал, но я не знаю как в него подгружать изображения в ячейки, как группировать ячейки, делать форматирование шрифтов... Либо я просто не нашел материалов по этому.
  • Как лучше формировать большие и сложные документы Excel?

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

    @vivaldy Автор вопроса
    Одиночка Айс, Сейчас так и есть, однако количество товаров растет а функции вставки изображений съедают огромное количество памяти, а рост количества столбцов увеличивает сильно время - в итоге по утру убеждаться сформировались данные или нет, если нет то решать вопросы с тем что надо наращивать - не сильно радует.
  • Почему изображение в Viber появляется только со второго раза?

    @vivaldy Автор вопроса
    Установил еще такие факты:
    1. Второй сайт имеет те же проблемы все таки, но возможно иногда срабатывает чуть быстрее и по тому проблема видна реже, но только что натыкался на ситуацию когда и для него нет изображения
    2. Вконтакте и телеграмм - в случае когда изображение создается - нормально ждут и его отображают (кеш контакта чистил)
    3. Вайбер похоже именно из-за времени имеет такую проблему - так как эта жалоба заказчика появилась после того как установил SSL сертификат, что вероятнее всего увеличило время отдачи картинки и проблема стала видна
    4. Ватсапп же пообще себя странно ведет - такое ощущение что он ищет микроразметку - так как при публикации статьи второго сайта - он выдает ее анонс, а на публикацию товара с первого - он вообще кидает просто ссылку и все


    Также сделал ссылку с помощью котором можно ставить эксперименты:
    Вот эта ссылка на товар - https://ldetki.ru/product/svecha_iz_voschiny_volsh...
    А эта ссылка удаляет изображение - https://ldetki.ru/unlink_og_foto_773400335248.php

    Если сначала вызвать вторую - и удалить, потом отправить в вайбере первую (на товар) то он будет без изображения, если отправить через 5 секунд еще раз первую - то уже товар будет с фото.
  • Как точно выставить timeout для php imap_open?

    Barmunk, сделал вот такую конфигурацию
    [Unit]
    Description=Get content from email
    After=network.target
    After=mysql.service
    Requires=mysql.service
    
    [Service]
    Type=simple
    User=site
    Group=site
    WorkingDirectory=/home/site/htdocs/worker
    ExecStart=/usr/bin/timeout --signal=SIGINT --kill-after=350 300 /usr/bin/php get_from_mail.php
    MemoryLimit=512M
    Restart=always
    RestartSec=60
    
    [Install]
    WantedBy=multi-user.target

    сам скрипт get_from_mail.php выглядит примерно так:
    $shallStopWorking = false;
    
    pcntl_signal(SIGTERM, function () use (&$shallStopWorking) { $shallStopWorking = true; });
    pcntl_signal(SIGINT,  function () use (&$shallStopWorking) { $shallStopWorking = true; });
    
    while (!$shallStopWorking) {
    	$mailbox = new PhpImap\Mailbox( '{imap.yandex.ru:993/imap/ssl}INBOX', ... );
    	$check = $mailbox->checkMailbox();
    	if ($check !== FALSE && $check->Nmsgs > 0) {
    		$mailsIds = $mailbox->searchMailBox('ALL');
    		if (!empty($mailsIds)) {
    			... работа с письмами ...
    		}
    	}
    	
    	$mailbox->disconnect();
    			
    	sleep(60);
    	pcntl_signal_dispatch();
    }


    собственно до этого запросы к почте шли раз в 5 секунд - при этом скрипт повисал раз в пару часов.
    перевел на запросы с периодичностью - раз в минуту - падения стали реже - пару раз в день.
    Добавил таймаут - забыл о том что имап может повиснуть, он повисает, но таймаут по истечении интервала в 5 минут шлет ему сигнал о завершении и если завершение не происходит то еще через минуту, его убивает, после чего системд видит, что скрипт завершился и запускает его заново.
    Решение получилось костыльное - но работает.
  • Как точно выставить timeout для php imap_open?

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

    Нашел такой совет: https://ru.stackoverflow.com/questions/980047/imap...
    то есть по сути запускать с таймаутом и прибивать скрипт по окончании времени (если он сам не завершится)
    по сути вижу единственным быстрым и простым способом решить эту проблему.

    Для работы с имап использую вот этот класс https://github.com/barbushin/php-imap

    А что получилось в итоге у вас с этой проблемой?
  • Какая версия лучше: адаптивную или десктоп + мобильная?

    @vivaldy Автор вопроса
    сайт новостного плана, сми - не было такого среди них? насколько разнился трафик? пытаюсь понять есть ли резон тянуть две версии
  • Как выбрать объекты из базы данных по geo координате с условием что координата входит в полигоны объектов?

    @vivaldy Автор вопроса
    Я недавно поиск не elasticsearch делал - мне он очень понравился, но блин напрягает отсутствие русской документации - читаю, но с огромным скрипом, а гугл-транслейт порой только путает...
    Спасибо за наводку, посмотрю
  • Есть ли программа массового изменения файлов?

    @vivaldy Автор вопроса
    Да это не сложно и более чем возможно, просто я раньше видел такие решения и мне показалось что лучше взять нечто готовое.