Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > проблема с ожиданием


Автор: ReactOS 8.4.2008, 15:54
Код

<html>
<head>
<title>Control System</title>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>

    <td align="center" valign="top" height="100%"><img src = "./wait.jpg"></td>

</tr>
</table>
</body>
</html>
<? sleep(5); ?>
<? header ("Location: index2.php"); ?>


Суть задачи состоит в том, чтобы показать обяъвление на странице index.php, а потом через 5 секунд перенаправить на index2.php
Искала в доках функцию для решения этой задачи, по-моему это функция sleep(); ,т.е. по логике сначала должна отобразиться на странице html-содержимое, как раз то объявление, а потом редирект на индекс2, но посколько хэдер срабатывает сразу же без ожидания, то перед по моей логике нужно вставить функцию sleep(); , чтобы был интервал времени до редиректа!

Моя логика нерабочая, попрошу мне объяснить в чем мои ошибки?  smile 

Камнями не кидать в меня smile

Автор: awers 8.4.2008, 15:55
ну если уже на php, то перед sleep надо flush делать

Добавлено через 48 секунд
а вообще meta HTTP-EQUIV="Refresh" CONTENT="5;URL='http:...

Автор: ReactOS 8.4.2008, 15:57
Цитата

flush
(PHP 4, PHP 5)

flush — Flush the output buffer

Description
void flush ( void )

Flushes the output buffers of PHP and whatever backend PHP is using (CGI, a web server, etc). This effectively tries to push all the output so far to the user's browser. 

flush() has no effect on the buffering scheme of your web server or the browser on the client side. Thus you need to call both ob_flush() and flush() to flush the output buffers. 

Several servers, especially on Win32, will still buffer the output from your script until it terminates before transmitting the results to the browser. 

Server modules for Apache like mod_gzip may do buffering of their own that will cause flush() to not result in data being sent immediately to the client. 

Even the browser may buffer its input before displaying it. Netscape, for example, buffers text until it receives an end-of-line or the beginning of a tag, and it won't render tables until the </table> tag of the outermost table is seen. 

Some versions of Microsoft Internet Explorer will only start to display the page after they have received 256 bytes of output, so you may need to send extra whitespace before flushing to get those browsers to display the page. 

Return Values
No value is returned. 


хм...

Автор: awers 8.4.2008, 15:57
Rexona, и чё ХМ?

Добавлено через 1 минуту и 4 секунды
я полностью ответил однако

Добавлено через 1 минуту и 34 секунды
А вообще sleep это муветон

Автор: ReactOS 8.4.2008, 15:59
Цитата(awers @  8.4.2008,  15:57 Найти цитируемый пост)
Rexona, и чё ХМ? 

туплю с flush();, что-то недопонимаю или англ. уже перестала понимать smile

Добавлено через 1 минуту и 47 секунд
Цитата(awers @  8.4.2008,  15:57 Найти цитируемый пост)
А вообще sleep это муветон

муветон? smile
а это что такое? movietone?

Автор: awers 8.4.2008, 16:01
Короче... После <head> втыкни <META HTTP-EQUIV="REFRESH" CONTENT="секунд;URL=адрес">

Добавлено через 1 минуту и 58 секунд
Rexona, это значит "неправильно так делать". представь, скрипт вместо 0,00001 сек будет висеть в памяти 5 сек...

Добавлено через 5 минут и 18 секунд
тему можно пометить решенной

Автор: MoLeX 8.4.2008, 16:14
Цитата(awers @  8.4.2008,  16:01 Найти цитируемый пост)
После <head> втыкни <META HTTP-EQUIV="REFRESH" CONTENT="секунд;URL=адрес">

лучшего всего использовать...


Цитата(Rexona @  8.4.2008,  15:54 Найти цитируемый пост)
по-моему это функция sleep();

да это она, только не думаю что твоему хостеру понравятся такое затянувшее выполнения скрипта..
awers по твоему вопросу уже полностью ответил, дерзай  smile  

Автор: mishaSL 8.4.2008, 16:16
Rexona, либо через заголовки:
Код

header("Refresh: 5; url=index2.php");
<html>
<head>
<title>Control System</title>
</head>
<body>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
    <td align="center" valign="top" height="100%"><img src = "./wait.jpg"></td>
</tr>
</table>
</body>
</html>


sleep() - для этих целей использовать нельзя (т.е. не желательно), т.к. процесс висит в памяти.

Добавлено через 1 минуту и 11 секунд
Только вместо index2.php лучше полный адрес указывать, вместе с http://

Автор: ReactOS 8.4.2008, 16:52
mishaSL, awers спасибо!

только тогда остался один вопрос: "в каких случаях нужно применять функцию sleep(); , т.е. где без нее не обойтись? " (а то встает вопрос, для чего она вообще нужна, если от нее проблемы)

Автор: mishaSL 8.4.2008, 16:56
Цитата(Rexona @  8.4.2008,  16:52 Найти цитируемый пост)
в каких случаях нужно применять функцию sleep(); , т.е. где без нее не обойтись? 

лучше ее не использовать.
Если только вы понимаете, что у вас больше нет вариантов кроме sleep(). (у меня таких ситуаций небыло)

Автор: flashaa 8.4.2008, 16:58
Цитата(Rexona @  8.4.2008,  15:54 Найти цитируемый пост)
Суть задачи состоит в том, чтобы показать обяъвление на странице index.php, а потом через 5 секунд перенаправить на index2.php

Посмотрите как такое сделано нормальными руками ) 
http://dklab.ru/chicken/nablas/17.html

ТУпо HTML:
Код


<meta http-equiv=Refresh 
    content="5; URL=/some/other/script.html">


Автор: sTa1kEr 9.4.2008, 13:37
Цитата(awers @  8.4.2008,  16:55 Найти цитируемый пост)
ну если уже на php, то перед sleep надо flush делать

Не пойдет, со flush-ем уйдут заголовки и header() уже не отработает.

Цитата(mishaSL @  8.4.2008,  17:16 Найти цитируемый пост)
sleep() - для этих целей использовать нельзя (т.е. не желательно), т.к. процесс висит в памяти.

Не просто висит в памяти, но и жрет процессорное время.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)