За последние 24 часа нас посетили 17373 программиста и 1681 робот. Сейчас ищут 945 программистов ...

Как остановить загрузку страницы в браузере...

Тема в разделе "Прочие вопросы по PHP", создана пользователем enshtein, 30 окт 2008.

  1. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    Подскажите как сделать такую штуку:

    PHP:
    1. <?php
    2. echo '<html>
    3. Конец страницы!
    4. </html>';
    5.  
    6. // остановка загрузки/обновления страницы в браузере!
    7. // далее скрипт продолжает работать, а у юзера уже загрузилась страницы целиком и он ни о чем незнает :)
    8.  
    9. // какие-либо действия....
    10. ?>
     
  2. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    помоему php от stdout отвязаться совсем не может.. по крайней мере как модуль апача.. хотя могу ошибаться
     
  3. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    пока в голову приходит только мысль подключать вызывать нужный скрипт в скрытом iframe на странице, при этом ставя в начале скрипта вызываемого через фрейм: ignore_user_abort(true);

    анн.. нет... страница все равно ползет в статусе (загрузка идет для фрейма!)
     
  4. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    может попробовать принудительно выставить в хэдерах content-length: байты страницы + connection: close ?
     
  5. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ты хочешь отдать страницу в браузер, но чтобы браузер её не показал 0о?
    enshtein, для чего всё это?
    наверника велосипед пишешь...
     
  6. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Mr.M.I.T.
    он хочет отдать страницу в браузер и отвалиться от апача.. юзер получил законченную страницу, а скрипт в это время продолжает трудиться на сервере и живёт своей собственной жизнью
     
  7. dAllonE

    dAllonE Guest

    Погугли по запросу "демоны на PHP"

    Ну или:

    http://www.softtutograf.com/node/2625

    Часть I.я глава 5.я там про демоны на PHP попробуй может поможет.
     
  8. kostyl

    kostyl Guest

    может выполнить функции по завершению работы скрипта???
     
  9. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
     
  10. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    именно!
     
  11. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    попробуй правда
    самому интересно, но проверять некогда

    то-есть ставишь в самом начале скрипта:
    Код (Text):
    1.  
    2. ob_start();
    там, где нужно прекратить вывод:
    Код (Text):
    1.  
    2. Header("Content-length: ".strlen(ob_get_contents()));
    3. Header("Connection: close");
    4. ob_end_flush();
    и после пытаться выполнять некоторые действия
     
  12. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    PHP:
    1. <?php
    2. echo 'работает... все! стоп!';
    3. header("Content-length: ".strlen(ob_get_contents()));
    4. header("Connection: close");
    5. sleep(10);
    6. ?>
    не пашет!
     
  13. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    PHP:
    1. <html>
    2. <head>
    3.     <title>Проверка!</title>
    4. </head>
    5. <body>
    6. Тут может быть любой текст!
    7. </body>
    8. <?php
    9. echo '<script>window.stop();</script></html>';
    10. flush();
    11. sleep(5);
    12. ?>
    такое срабатывает, но только под FF3, в IE и Opera отказывается ...
     
  14. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    enshtein
    как вариант решения проблемы:
    после выполнения скрипта остальные действия поместить в другой скрипт, после чего его дёрнуть через сокеты и сразу закрыть соединение.. второй скрипт будет выполняться, выплёвывая данные вникуда, а у первого всё завершиться
     
  15. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    PHP сначала формирует контент, потом убивает скрипт, передает контент апачу, а тот его отсылает.
     
  16. QQQ

    QQQ Активный пользователь

    С нами с:
    21 ноя 2007
    Сообщения:
    538
    Симпатии:
    0
    Kreker
    а flush()?
    а иногда и без flush'a частями отдаёт.. всё не однозначно, как они там обмениваются между собой - хз.. но отрубиться от выходного потока вроде правда нельзя
     
  17. смотря как подключен ПХП а Апачу.
     
  18. alBoo

    alBoo Активный пользователь

    С нами с:
    27 мар 2008
    Сообщения:
    63
    Симпатии:
    0
    если не ошибаюсь, в этом случае чтобы браузер начал отдавать контент, нада в самом начале вывести 1024 символа (пробелы напр)
    Код (Text):
    1.  
    2. echo str_pad( ' ',1024);
    3. ob_start();
    4. .....
     
  19. enshtein

    enshtein Активный пользователь

    С нами с:
    27 авг 2006
    Сообщения:
    291
    Симпатии:
    0
    в FF все так и есть.... в IE и Опера - не работает!
     
  20. asik

    asik Активный пользователь

    С нами с:
    12 июл 2007
    Сообщения:
    211
    Симпатии:
    0
    Код (Text):
    1. <?php
    2. echo "START";
    3.  
    4. $pid = pcntl_fork();
    5. if ($pid == -1)
    6. {
    7.      die("could not fork");
    8. } else
    9. {
    10.   if ($pid)
    11.   {
    12.      // это родитель
    13.      echo "<br>STOP";
    14.   } else
    15.   {
    16.      // это потомок
    17.     for($i=0;$i<5;$i++)
    18.     {
    19.       sleep(1);
    20.     };
    21.     $r=fopen('c:\1.txt',"w");
    22.     fwrite($r,"123");
    23.     fclose($r);
    24.   }
    25. };
    26. ?>