Текст пользователю, отрубить юзера, а скрипт дальше работал. как?

Тема в разделе "Как сделать...", создана пользователем dandandan, 27 фев 2012.

  1. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Есть следующая задача:
    1. При запуске скрипта отдать пользователю некоторый текст, сгенерированный скриптом. а-ля echo 'текст';
    2. Отключить этого пользователя, а скрипт должен продолжать работать как в случае с ignore_user_abort(true);

    Как именно отключить пользователя ? Почему-то в голове всплыла команда connection_close() , но не нашел ее в функциях php.
     
  2. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    732
    Симпатии:
    323
    unset()
    destroy()

    ?
     
  3. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Надо закрыть http соединение пользователя, и продолжить работу скрипта.
    unset() и destroy() вообще ни к месту. Да и php не знает такой команды destroy().
     
  4. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    732
    Симпатии:
    323
    я имел ввиду
    session_destroy() и session_unset()

    Код:
    header('Connection: close');
    Такое подходит?
     
    dandandan нравится это.
  5. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    Несколько причин:
    1. Нежен будет повторный запрос к бд.
    2. Существует вероятность, что не произойдет http соединение
    3. Зачем лишний код, если все можно сделать одной командой.
    Похоже, что тоже не совсем подходит. Если сначала выдам пользователю текст, то php ругается на отправленный хедер после текста.
    А если сделаю закрытие соединения, то не смогу пользователю передать текст.
     
  7. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    ob_start();
     
    // вывод
     
    header("Content-Length: ".ob_get_length());
    header("Connection: close");
    ob_end_flush();
    браузер отключается, скрипт работает дальше
     
  8. Sunday

    Sunday

    Регистр.:
    13 дек 2009
    Сообщения:
    732
    Симпатии:
    323
  9. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    990
    Симпатии:
    267
    изучил пример вверху. Теперь хотелось бы понять как работает сама функция header("Connection: close");

    $length = ob_get_length(); - получили размер буфера с текстом.
    header("Connection: close"); - закрыли соединение с браузером. На мой взгляд больше браузер не должен ничего получить весь вывод текста ниже - неправильная работа браузера.

    // что будет если здесь будет еще echo 'Текст'; покажется ли он на экране пользователя во всех ли браузерах будет 1 и та же реакция??

    // sleep (10000) // скрипт спит 10 секунд. Брузер получит буфер только через 10 секунд?

    ob_end_flush(); ob_flush(); flush(); - отдали буфер с текстом.

    // что будет если здесь будет еще echo 'Текст'; покажется ли он на экране пользователя? Видимо этот текст пользователь уже не получит. Правильно ли думаю?


    Как будут вести себя браузеры если не указывать:
    header("Content-Length: " . $length);
    header("Content-Encoding: none");
    header("Accept-Ranges: bytes");