2012-06-15 4 views
-2

Я хочу повторно проверять переменную каждый раз, когда php просыпается от sleep(). Кроме того, если 3 минуты прошли без нахождения определенной переменной, функция должна прекратить проверку. Как я могу это сделать? Это код, который у меня до сих пор:Повторение PHP после пробуждения

<?php 
    $file = file_get_contents("file.txt"); 
    if($file == 0){ 
    sleep(3);// then go back to $file 
    } else { 
    //stuff i want 
    } 
?> 
+0

разместить свой код .. как далеко вы пытались .. – Broncha

+0

... и, пожалуйста, лучше объяснить, что вы пытаетесь сделать –

+0

отредактирован ... :(@ голосов –

ответ

2

Если вы хотите продолжать что-то делать, пока что-то еще не произойдет, вам нужен цикл. У вас есть две вещи, чтобы проверить, следует ли вам выйти из цикла: переменная файла и время. Вам нужно добавить переменную, чтобы отслеживать время, или вам нужно проверять время при каждом цикле и сравнивать его с временем начала.

<?php 

    $file = file_get_contents("file.txt"); 
    $timesChecked = 0; 
    while($file == 0 and $timesChecked < 60) 
    { 
     sleep(3); 
     $timesChecked++; 
     $file = file_get_contents("file.txt"); 
    } 
    if($file != 0) 
    { 
      // stuff i want 
    } else { 
      // 3 minutes elapsed 
    } 
?> 
+0

Обратите внимание, что эта функция будет, как минимум, работать в течение 6000 секунд или 100 минут. e, что сон может не вернуться ровно через три секунды в зависимости от того, как ОС решает обрабатывать процессы. Поэтому, даже если для параметра $ timesChecked установлено значение <60, это может продолжаться более трех минут с неопределенной суммой. –

+0

@ NathanielFord: Спасибо. Я думал, что сон() взял микросекунды или что-то в этом роде, а затем я сделал математику неправильно. :) Вы абсолютно правы в неточности этого метода. Лучше сравнивать с 'time()', если это 3 минуты является требованием точности. http://us.php.net/time –

+0

Как сделать загрузку страницы обычным образом, не дожидаясь, что $ file станет чем-то еще –

1
<?php 
    //This function returns false if the time elapses without finding the variable. 
    //Otherwise it executes what you want to do. It could instead return true if that makes sense. 
    function waitForContent($filename) { 
    $timeElapsed = 0; 
    $lastTry = 0;//the time the file was last checked for contents 

    $filehandler = file_get_contents($filename); 
    while ($filehandler == 0) { 
     $currentTime = microtime();//current time in microseconds 
     $timeElapsed = $currentTime - $lastTry;//Note this may not be three seconds, due to how sleep works. 
     $lastTry = currentTime;//update the time of the last trye 
     if ($timeElapsed > (180 * 1000)) {//if three minutes has passed, quit. 
     return false; 
     } 
     sleep(3); 
     $filehandler = file_get_contents($filename);//update file handler 
    } 

    stuffIWantToDo();//stuff you want to do function. 
    } 
Смежные вопросы