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

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

  1. dandandan

    dandandan

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

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

    Sunday

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

    ?
     
  3. dandandan

    dandandan

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

    Sunday

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

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

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Как бы простой вопрос что мешает сделать два скрипта?
    Один, выводит надпись и потом гетом пинает другой который уже и продолжает молотить? или открывает сокет и постом на второй шлет нужные данные.
     
  6. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    996
    Симпатии:
    268
    Несколько причин:
    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
    Сообщения:
    759
    Симпатии:
    326
  9. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    996
    Симпатии:
    268
    изучил пример вверху. Теперь хотелось бы понять как работает сама функция 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");