Привет! Мой скрипт состоит из двух частей. Первая генерирует HTML страницу. А вторая загружает ресурс из сети и сохраняет его в файл. Загрузка - долгая операция и может выполняться до 10 секунд. Результат загрузки никак не отражается на содержимом HTML страницы. Сначала выполняется первая часть, а потом вторая. По окончанию первой части я вызываю flush(), это позволяет отобразить страницу сразу перед стартом второго этапа. Однако, встроеный в страницу Flash-ролик SWF не отображается. SWF - это ключевой элемент страницы и его необходимо отобразить как можно раньше. Он встроен в страницу с помощью библиотеки SwfObject. Проблема в том, что SwfObject начинает открывать SWF по событию onLoad() страницы. А событие onLoad() приходит только по окончанию второй части, то есть может быть вызвано через 10 секунд. В итоге не смотря на вызов flush() пользователь ждет впустую до 10 секунд. Можно ли решить эту проблему при помощи PHP? Можно ли запустить задачу загрузки (второй этап)в отдельном процессе? Можно ли сообщить браузеру перед вторым этапом, что страница готова и можно уже посылать странице событие onLoad()?
1. загружаешь закачку файла и выдаешь пользователю в броузер редирект на страничку со флешем. 2. первая страничка обрабатывает ignore_user_abort() и продолжает качать файл, тогда как редирект уже показывает флеш.
Спасибо большое! Красивое решение (и пока единственное которое у меня есть). К сожалению у меня не получилось успешно его реализовать. Вот скрипт, который должен в фоне загружать книжку из lib.ru и переходить на яндекс. Увы, скрипт сначала грузит книжку, а потом уже переходит на яндекс. Наверняка что-то я делаю не так Код (Text): <?php $redirectUrl = "http://yandex.ru"; header("Location: $redirectUrl"); ?> <html> <head> <title>Main</title> </head> <body> Main<br/> </body> </html> <?php loadResource(); function loadResource() { $url = "http://lib.ru/DVOJS/ulysses.txt"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable curl_setopt($ch, CURLOPT_TIMEOUT, 60); $text = ""; try { $text = curl_exec($ch); } catch (Exception $e) { echo("Exception...\n$e"); return; } //Text processing skipped... } [/quote]
Код (Text): $text = ""; try { $text = curl_exec($ch); } catch (Exception $e) { echo("Exception...\n$e"); return; }
проблема в архитектуре, а не в реализации, поэтому и возникает такая ерунда. головой надо думать прежде чем код ваять.
440Hz, да я действительно не подумал. Решение проблемы пришло само, я поместил SWF в iframe и теперь флешка открывается моментально. А код ваять да, я могу, 6 лет в Borland этим занимался.