За какво се използва функцията sleep

  • Автор Автор bama
  • Начална дата Начална дата

bama

Registered
И не ми давайте мануала, четох го.. нищо не разбрах.
 
Най-просто казано - кода "заспива" за определено време..

Например
Код:
<?php
echo 'before';
sleep(5);
echo 'after';
?>

Кода ще изпълни частта преди sleep, т.е. "echo 'before'", след което ще "заспи" за 5 секунди и ще продължи с останалото :)

Полезно е, аз например съм си направил auto-restart на една програмка и използвам sleep, за да определям интервала между спирането и стартирането и :)

ПП. Ето и друг пример от php.net - ще добиеш представа за какво става въпрос ако все още не си разбрал
Код:
<?php

// current time
echo date('h:i:s') . "\n";

// sleep for 10 seconds
sleep(10);

// wake up !
echo date('h:i:s') . "\n";

?>
 
Нещо не показва "before", докато "спи"..
Показват се и двете наведнъж
 
Код:
<?php
ob_start();

ob_implicit_flush(true);
//[ OR ] echo "..."; ob_flush(); flush();

set_time_limit(0);

function sleep_echo($secs) {
    $secs = (int) $secs;
    $buffer = str_repeat(".", 4096);
    //echo $buffer."\r\n<br />\r\n";
    for ($i=0; $i<$secs; $i++) {
        echo date("H:i:s", time())." (".($i+1).")"."\r\n<br />\r\n".$buffer."\r\n<br />\r\n";
        ob_flush();
        flush();
        sleep(1);
        //usleep(1000000);
    }
}

sleep_echo(30);

ob_end_flush();
?>
 
Е показват се и двете, но времето е различно, т.е. after е с 10 сек. повече от before :) :?:
 
Това е нормално. Sleep е една напълно безсмислена функция. И двете се появяват едновременно заради същността на HTTP и PHP А именно - HTTP предава данните наведнъж, а PHP е скриптов език по природа => изпълнява си функциите и спира.
 
Парсера няма как да изпише, каквото и да било без да приключи изпълнението на скрипта. Затова получаваш всичко накуп.

Sleep(); спира изпълнението за някакъв интервал от време, не използва повторно извикване на скрипта или някаква магия, която променя принципа на действие на PHP.

За какво се използва Sleep() ?

Конкретен пример: написал си програмка, която отваря и чете от URL-адрес. Сървъра проверява адреса, но другия сървър връща грешка 503 (претоварване). Изпозлваш sleep(); за да накараш твоя сървър да изчака за няколко секунди и да опита ново свързване към външния адрес, за да види дали вече не е активен.

Онова, което ми се струва, че търсиш като ефект се прави с JavaScript :?:
 
Код:
<?php
ob_start();
date_default_timezone_set('Europe/Sofia');

function sleepBuffer($secs)
{
        echo str_repeat(' ', 1024);
        ob_flush();
        flush();
        sleep($secs);
}

printf('%.0f sec sleep - <strong>(%s)</strong><br />', 2, date('H:i:s'));
sleepBuffer(2);
printf('%.0f sec sleep - <strong>(%s)</strong><br />', 2, date('H:i:s'));
sleepBuffer(2);
printf('%.0f sec sleep - <strong>(%s)</strong><br />', 5, date('H:i:s'));
sleepBuffer(5);
printf('%.0f sec sleep - <strong>(%s)</strong><br />', 10, date('H:i:s'));
sleepBuffer(10);
printf('%.0f sec sleep - <strong>(%s)</strong><br />', 3, date('H:i:s'));
sleepBuffer(3);
echo 'End ^^ - <strong>' . date('H:i:s');
?>

Работи, тествано е ^^
 
Онова, което ми се струва, че търсиш като ефект се прави с JavaScript

Като се пусне нещо във форма и да изчака няколко секунди УЖ, че зарежда :D
 

Back
Горе