• Почему php-fpm не останавливается при отмене соединения?

    @marliotto Автор вопроса
    Заработало только при socket соединении.
    Так же PHP узнает об обрыве соединения, только после отправки данных клиенту (через echo, header) и сбрасывании буфера.
    Код будет следующим
    <?php
    
    //Работает только при socket соединении
    //необходимо выставить в true. Иначе после вывода данных выполнение скрипта прервется
    ignore_user_abort(true);
    
    sleep(8);
    
    echo 'message';
    flush();//только теперь php знает, оборвалось соединение или нет
    
    $status = connection_status();
    
    if ($aborted = connection_aborted()) {
        file_put_contents(__DIR__ . '/a', date('d.m.Y H:i:s') . ' - aborted (' . $aborted . '); Status - ' . $status);
        echo 'aborted';
    } else {
        file_put_contents(__DIR__ . '/a', date('d.m.Y H:i:s') . ' - connected (' . $aborted . '); Status - ' . $status);
        echo 'connected';
    }


    Ссылки по теме
    stackoverflow.com/a/25251852
    php.net/manual/ru/function.ignore-user-abort.php (смотреть примечание)
    Ответ написан
    Комментировать
  • Использование исключения для редиректа/возврата результата в Symfony 2

    @marliotto

    Возвращение методом либо Response либо, что то иное это тоже кривой подход. Почему бы не подписаться на событие kernel.request, которое происходит до выполнения экшена в контроллере. И проверять входные данные, в случае если они не устраивают возвращать Response и тогда контроллер не будет вызываться.

    Ответ написан
    Комментировать