[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Работа скрипта после завершения загрузки страницы
LRCenter
Можно ли послать http-заголовок браузеру, что документ загружен(кстати это какой номер? 200?), и после незаметно для пользователя и браузера продолжить выполнение скрипта(скрипт не выводит никакой контент) c параметром ignore_user_abort(true); ?



Спустя 34 минуты, 54 секунды (20.11.2010 - 12:18) LRCenter написал(а):
Ну то есть как можно сделать такой финт:


ignore_user_abort(true);

#Тут какой-нибудь заголовок что бы брузер отцепился от страницы и в тоже время ничего не выводил, какой вот только?
header("HTTP/1.0 404 Not Found");

#Далее идет код который будет выполнятся после окончания загрузки страницы в браузере.



Возможно ли это сделать и какой послать заголовок? Очень надо.

Спустя 1 час, 11 минут, 25 секунд (20.11.2010 - 13:29) DySprozin написал(а):
;;Можно ли послать http-заголовок браузеру, что документ загружен(кстати это какой номер? 200?)
эээ... ну если докумет на месте, то такое сообщение и посылается (;

;;незаметно для пользователя и браузера продолжить выполнение
а если так...

<?php
ignore_user_abort(true);
...

скрипт
...
?>

<html>
документ
</html>

<
script type="text/javascript">
window.stop();
</
script>


ну или юзай iframe (;

Спустя 2 часа, 10 минут, 35 секунд (20.11.2010 - 15:40) LRCenter написал(а):
DySprozin, нет, скрипт должен обязательно выполнятся после отображения страницы - его выполнение может затянутся на длительное время.

JavaScript и фреймы использовать не хочу. Надо чтобы было универсально и для людей и для роботов.

Может послать заголовок с другим кодом, но с каким?

http://ru.wikipedia.org/wiki/Список_кодов_состояния_HTTP

Спустя 7 минут, 52 секунды (20.11.2010 - 15:48) DySprozin написал(а):
LRCenter
тогда попробуй в html страницу вставить
<img src="./script.php" width="1px" height="1px">


а уже в script.php написать
<?php
ignore_user_abort(true);
...

скрипт
...
?>

Спустя 8 минут, 11 секунд (20.11.2010 - 15:56) LRCenter написал(а):
DySprozin, в этом случае эта "картинка" может загружаться полчаса))
Браузер будет показывать что страница не дозагружена? А поисковики вообще непредсказуемо отреагируют.

Хотелось бы, все же что бы процесс запускался незаметно для любых браузеров или агентов.

Тогда я просто мог бы вставить file_get_contents со ссылкой на такой скрипт, он бы быстро возвращал пустую строку и пользовательская страница грузилась бы дальше, а запущеный скрипт продолжал работать до победного конца.

Спустя 4 минуты, 9 секунд (20.11.2010 - 16:00) DySprozin написал(а):
LRCenter
тогда ИМХО нельзя - либо юзверь останавливает загрузку страницы, либо жабаскрипт (;

Спустя 3 минуты, 55 секунд (20.11.2010 - 16:04) LRCenter написал(а):
DySprozin, смотри а если я верну


ignore_user_abort(true);

$redirekt = "На пустую страницу";
header ('HTTP/1.1 301 Moved Permanently');
header ("location: " . $redirekt);

#Код



При редиректе код продолжит выполнятся, ignore_user_abort(true) же?

Спустя 32 минуты, 18 секунд (20.11.2010 - 16:36) DySprozin написал(а):
LRCenter
идея красивая (; но не работает (только что проверил). Можешь и сам проверить:

<?
ignore_user_abort(true);

$redirekt = "/";
header ('HTTP/1.1 301 Moved Permanently');
header ("location: " . $redirekt);

for($i=0;$i<10;$i++){
fopen($i,"w+");
}
?>


Есть еще такая идея:

system("php script.php &");


тогда скрипт запуститься, а страница окажется загружена. Ключевую роль играет последний амперсанд (;

Спустя 17 минут, 6 секунд (20.11.2010 - 16:53) LRCenter написал(а):
DySprozin, да редирект происходит только после того как выполнится весь скрипт, почему-то :(

system("php script.php &");


Не пашет тоже, что это вобще такое?

Спустя 13 минут, 18 секунд (20.11.2010 - 17:07) DySprozin написал(а):
LRCenter
;;Не пашет тоже, что это вобще такое?
это запуск скрипта в unix-системах в фоновом режиме (; или у тебя хостинг под виндой? (;

Спустя 7 минут, 37 секунд (20.11.2010 - 17:14) LRCenter написал(а):
Да я на локальном серве, под виндой.

А под линуксом это

system("php script.php &");
загрузка страницы завершается без ожидания окончания загрузки запущенного так скрипта?

А что значит амперсанд в конце строки?

Спустя 2 минуты, 5 секунд (20.11.2010 - 17:16) DySprozin написал(а):
;;загрузка страницы завершается без ожидания окончания загрузки запущенного так скрипта?
да

;;А что значит амперсанд в конце строки?
значит "запускать в фоновом режиме" (т.е. не ждать, пока скрипт закончит свою работу).

Спустя 7 минут, 49 секунд (20.11.2010 - 17:24) LRCenter написал(а):
А возможность запуска такой команды - system() может быть заблокирована хостером?

Спустя 2 минуты, 6 секунд (20.11.2010 - 17:26) DySprozin написал(а):
LRCenter
бесплатным - да
платным - нет (;

Спустя 6 минут, 20 секунд (20.11.2010 - 17:33) LRCenter написал(а):
И выводить содержимое работы скрипта с амперсандом тоже не будет?
---

Получается что если запускать таким способом, не нужно добавлять строку
ignore_user_abort(true);

в исполняемый код?

Спустя 2 минуты, 47 секунд (20.11.2010 - 17:35) DySprozin написал(а):
;;И выводить содержимое работы скрипта с амперсандом тоже не будет?
да

;;не нужно добавлять строку
угу (;

Спустя 11 минут, 46 секунд (20.11.2010 - 17:47) LRCenter написал(а):
DySprozin, вы знаете проверил под линуксом - все запускается, но почему-то даже с амерсандом приходится ждать пока скрипт доделает свою работу. :(

из index.php вызываю:

system("php demon.php &");


В demon.php цикл на сто миллионов тактов, без вывода. Приходится ждать несколько сек. пока он не закончит работу index.php дальше не грузится.

Что не так?

Спустя 2 минуты, 28 секунд (20.11.2010 - 17:50) DySprozin написал(а):
LRCenter
странно... по ssh зайти и в командной строке набрать php demon.php & можете?

Спустя 9 минут, 25 секунд (20.11.2010 - 17:59) LRCenter написал(а):
нет. Это как?

---

В процессе зарузки страницы в опера, индикатор загрузки прерывается и, видимо как раз во время работы demon.php показывает 3Б - типа 3Байта.

Спустя 15 минут, 14 секунд (20.11.2010 - 18:14) LRCenter написал(а):
Может эти 3 байта вывод от скрипта, а вывода быть не должно:

Цитата
Примечание: если вы начинаете программу с использования этой функции и хотите оставить её работать в фоновом режиме, вы должны гарантировать, что вывод этой программы будет перенаправлен в файл или какой-нибудь другой поток вывода, иначе PHP зависнет, пока не закончится выполнение программы.

http://www.php.su/functions/?system



Думал может BOM, пересохранил - проверил, даже в ANSI, пересохранил - разультат тотже.

Спустя 6 минут, 49 секунд (20.11.2010 - 18:21) LRCenter написал(а):
Код, demon.php, как вы можете убедиться никакого вывода:

<?php


$x=0;
while ($x<100000000)
{
$x++; // Увеличение счетчика
}




?>

Спустя 57 секунд (20.11.2010 - 18:22) DySprozin написал(а):
;;нет. Это как?
тогда не надо (;

попробуй так:
system("php demon.php > text.txt &");
и так:
system("php demon.php & > text.txt");

Спустя 14 минут, 6 секунд (20.11.2010 - 18:36) LRCenter написал(а):
Да, сработал первый вариант!
Это мы перенаправили вывод в файл? Он создался, а в нем 0 байт. Странно.

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

Спустя 9 минут, 7 секунд (20.11.2010 - 18:45) DySprozin написал(а):
;;Да, сработал первый вариант!
бинго! (;

;;Это мы перенаправили вывод в файл? Он создался, а в нем 0 байт. Странно.
очень просто: скрипт не выводит ничего, вот и получается 0 байт (;

;;Это очень важно для меня.
хехе (; да мне было не сложно... кошелек ЯД добавил в подпись (;

Спустя 19 минут, 37 секунд (20.11.2010 - 19:05) LRCenter написал(а):
DySprozin, ловите гонорар biggrin.gif
Код протекции "6347".

----

Обнаглею и задам еще один вопрос, из чистого любопытства: wink.gif

А как можно запустить скрипт system-ом c параметрической get-строкой?

Цитата
system("php demon.php?p1=a&p2=b > text.txt &");

- не работает.

Спустя 27 минут, 19 секунд (20.11.2010 - 19:32) DySprozin написал(а):
;;DySprozin, ловите гонорар
мерси cool.gif

;;А как можно запустить скрипт system-ом c параметрической get-строкой?
system("php demon.php var1 var2 var3 > text.txt &");

тогда:
echo $argv[1]; // выведет "var1"
echo $argv[2]; // выведет "var2"
echo $argv[3]; // выведет "var3"

Спустя 3 минуты, 49 секунд (20.11.2010 - 19:36) LRCenter написал(а):
Ага, понятно, спасибо еще раз!

Спустя 1 минута, 35 секунд (20.11.2010 - 19:38) DySprozin написал(а):
обращайтесь (;

Спустя 25 дней, 19 часов, 59 минут, 52 секунды (16.12.2010 - 15:38) LRCenter написал(а):
А под виндой есть эквивалентаная функция?

Спустя 1 час, 54 минуты, 15 секунд (16.12.2010 - 17:32) Basili4 написал(а):
ИМХО я делал вот как. Занчит юзер загружает старницу стартует php скрипт записывающий некое заначение в файл базу не важно говорящие о том что пользователь видит сртаницу.

Есть некий скрипт работающий в фоне запускаемый кроном. Как только видит что занчение установлено он начинает вести бурную деятельность то есть делать, что ему надо и отписывать результаты в файл. Пользователь при обновлении страницы будет видеть новые данные.

Спустя 3 часа, 15 минут, 58 секунд (16.12.2010 - 20:48) LRCenter написал(а):
Не, тут фишка в том чтобы без хрона обойтись smile.gif


_____________
Меньше кода - меньше багов ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.