[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Хочу в начале вывод, а только потом обработку php
GENEROUS
Респект вам братья по разуму.
Вот у меня примерно такой код:

<?
echo "HI USER!";
<<Здесь идёт 20 секундная функция обработки файлов на сайте>>
?>

Т.е. если пользователь заходит на сайт, то ему придётся ждать 20 секунд чтобы увидеть предлложение "HI USER!"

Внимание вопрос:
Как сделать чтоб вначале выводилось HI USER!, а только потом обрабатывалась эта долгая функция.



Спустя 4 минуты, 41 секунда (10.04.2009 - 17:56) FatCat написал(а):
Редиректом?

Спустя 6 минут, 4 секунды (10.04.2009 - 18:02) Guest написал(а):
Желательно разделением потоков

Спустя 2 минуты, 45 секунд (10.04.2009 - 18:05) GENEROUS написал(а):
Это я написал:)

Спустя 4 минуты, 33 секунды (10.04.2009 - 18:09) GENEROUS написал(а):
Лучше зарегистрироваться:)
FatCat
А разве редиректом такое можно сделать?

Спустя 7 минут, 51 секунда (10.04.2009 - 18:17) FatCat написал(а):
Цитата (GENEROUS @ 10.04.2009 - 18:09)
А разве редиректом такое можно сделать?

Дык делается.
Нажмите ради интереса это и посмотрите страницу с редиректом. Пока рассматриваете, сценарий генерирует список ID-ов топиков для вывода на странице. laugh.gif

Спустя 12 минут, 32 секунды (10.04.2009 - 18:30) Guest написал(а):
Цитата
Дык делается.

А вот это интересно
А ещё интереснее как этот код выглядит.

Спустя 8 минут, 23 секунды (10.04.2009 - 18:38) FatCat написал(а):
В этом форуме довольно сложно реализовано.
Проще сделать по таску, заодно и кешироваться будет. wink.gif
То есть, file.php по вызову 20 секунд трудится, делает страницу? Ок, делаем его трудящимся, и страницу пусть не выводит на экран, а пишет в файл.

На стартовой странице ставим код однопиксельного рисунка с сорцами file.php, а так же любой желаемый текст с просьбой обождать, и мета-рефреш на 20 секунд.

В ситуации с кешированием, можно сначала проверить, есть ли уже скомпонованный файл, и если есть, то сразу редиректить, а если нет - таск однопиксельным рисунком и мета-рефреш 20 секунд.

Спустя 20 минут, 4 секунды (10.04.2009 - 18:58) GENEROUS написал(а):
Вот мне бы примерчик или хотяб на нужные функции посмотреть.
А то что-то я дуб дубом или мне отоспаться надо. blink.gif

Спустя 22 минуты, 20 секунд (10.04.2009 - 19:20) FatCat написал(а):
Сам файл, генерирующий данные для отдачи пользователю, build.php
PHP
ignore_user_abort(TRUE);

$time_next = Array();
$cache_dir="cache";
$open_dir=opendir($cache_dir);
while(
$tmp_name=readdir($open_dir))
{
    if(
stristr($tmp_name,".cache.tmp"))
        
$time_next[] = intvalstr_replace(".cache.tmp","",$tmp_name) );
    
}
if( 
count($time_next) == // Нет кеша главной
{
    
$time_next 0;
    
$cached_in_file "recach";
}
elseif( 
count($time_next) > // Несколько кешей
{
    
rsort($time_next);
    
unlink($cache_dir."/".$time_next[1].".cache.tmp");
    
$time_next $time_next[0];
}
else 
// Кеш есть
{
    
$time_next $time_next[0];
}
$time_delim time() - $time_next;

if( 
$time_delim 900 or $time_delim )
{
    
$cached_in_file "recach";
    if(
file_exists($cache_dir."/".$time_next.".cache.tmp"))
        
unlink($cache_dir."/".$time_next.".cache.tmp");
}
else
{
    
$cached_in_file "cached";
}
if(
$cached_in_file == "recach")
{

    
// Тут выполнили сложные 20-секундные процессы...

    
$fh fopen($cache_dir."/".time().".cache.tmp""w");
    
fwrite($fh$report_parsed);
    
fclose($fh);
}


Перекеширование 15 минут (900 секунд).

Спустя 8 минут, 4 секунды (10.04.2009 - 19:28) FatCat написал(а):
index.php
PHP
$time_next = Array();
$cache_dir="cache";
$open_dir=opendir($cache_dir);
while(
$tmp_name=readdir($open_dir))
{
    if(
stristr($tmp_name,".cache.tmp"))
        
$time_next[] = intvalstr_replace(".cache.tmp","",$tmp_name) );
    
}
if( 
count($time_next) == // Нет кеша главной
{
    
$time_next 0;
    
$cached_in_file "recach";
}
elseif( 
count($time_next) > // Несколько кешей
{
    
rsort($time_next);
    
unlink($cache_dir."/".$time_next[1].".cache.tmp");
    
$time_next $time_next[0];
}
else 
// Кеш есть
{
    
$time_next $time_next[0];
}
$time_delim time() - $time_next;

if( 
$time_delim 900 or $time_delim )
{
    
$cached_in_file "recach";
    if(
file_exists($cache_dir."/".$time_next.".cache.tmp"))
        
unlink($cache_dir."/".$time_next.".cache.tmp");
}
else
{
    
$cached_in_file "cached";
}
if(
$cached_in_file == "recach")
{
    echo 
"<img src='build.php' width=1 height=1 border=0>
    <p>Пожалуйста, подождите 20 секунд!</p>
    <META http-equiv=\"refresh\" content=\"0; URL=index.php\">"
;
}
else
{
    include(
$cache_dir."/".$time_next.".cache.tmp");
}

Спустя 13 минут, 48 секунд (10.04.2009 - 19:42) GENEROUS написал(а):
Ух ты, круто!
Буду разбираться.

Спустя 1 час, 36 минут, 59 секунд (10.04.2009 - 21:19) RealMan написал(а):
попробуй, просто, так:

PHP
<? 
echo 
"HI USER!";
flush();
<<
Здесь идёт 20 секундная функция обработки файлов на сайте>>
Быстрый ответ:

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