2012-10-08 13 views
5

Chcę zapytać, jak mogę używać funkcji php ponownie i po pewnym czasie automatycznie, podobnie jak setInterval w JavaScript. Ustawiamy czas i działa on do momentu skasowania lub zamknięcia skryptu.Jak korzystać z setInterval w PHP?

index.php

<? 
$Wall = new Wall_Updates(); 
$updatesarray=$Wall->Updates(); 
foreach($updatesarray as $data) 
{ 
    $likes=$data['likes']; 
    ?> 
    <div id="likes"><?php echo $likes; ?></div> 
    <? 
} 
?> 

I Wall_Updates() Funkcja jest zdefiniowana tu w FUNCTION.PHP

<?php 

class Wall_Updates {  
    public function Updates() { 
     $myname=$_COOKIE['usename']; 
     $query=mysql_query("SELECT * FROM posts WHERE name='$myname'"); 
     while($row=mysql_fetch_array($query)) 
      $data[]=$row; 
     return $data; 
    } 
} 
?> 

Chcę funkcja ta Wall_Updates(), aby ponownie pobrać dane z MySQL and again.So, zostanie zaktualizowany.

+0

Wiesz gdzie PHP działa i że generuje tylko statycznych stron? Można jednak użyć innej pętli 'while' i wywołania' sleep() ', aby opóźnić generowanie strony. Ale to chyba bezcelowe. – mario

+0

Wygląda na to, że chcesz zaktualizować swoją stronę za pomocą sumy "Likes". Musisz to zrobić w JavaScript, chyba że chcesz przeładować całą stronę. –

Odpowiedz

15

Dla przypomnienia: Myślę, że to zły pomysł. Ale cokolwiek :)

Spróbuj tego kodu

function setInterval($f, $milliseconds) 
{ 
    $seconds=(int)$milliseconds/1000; 
    while(true) 
    { 
     $f(); 
     sleep($seconds); 
    } 
} 

Zastosowanie:

setInterval(function(){ 
    echo "hi!\n"; 
}, 1000); 

Lub:

$a=1; 
$b=2; 

setInterval(function() use($a, $b) { 
    echo 'a='.$a.'; $b='.$b."\n"; 
}, 1000); 
+2

Dlaczego uważasz, że to zły pomysł? –

+0

Po prostu próbowałem, a moja strona przestała działać. Użyłem 10000 jako intervall. – Black

+2

@b_dubb: ponieważ zachowuje się nie jak 'setInterval' w javascript. Taka implementacja nie pozwala na wykonanie określonego zadania "w tle", gdy JS - robi. Ponieważ JS jest asynchroniczny, PHP - nie. Dlatego pomyślałem, że to zły pomysł. –

0

Nie jest jasne, co dokładnie chcesz osiągnąć.

Czy zdajesz sobie sprawę, że PHP dostarcza treści tylko na żądanie?

Jeśli chcesz, aby serwer aktualizował coś od czasu do czasu (na przykład plik), użyj cronjob (on * nix).

Jeśli chcesz, aby twoja WEBPAGE ponownie zapytała o coś, zrób to w javascript i wywołaj skrypt PHP, który dostarcza świeżą zawartość.

6

Proponuję użyć setInterval do odpytywania dla wyników ze strony .php za pomocą AJAx, a następnie wyprowadzać wyniki.

Tak to będzie wyglądać coś takiego przy użyciu jQuery:

<script> 
    var poll = true; 
    var getData = function() { 
     if (poll) { 
      $.get('getData.php', function(data) { $('#likes').html(data); }); 
     } 
    }; 

    $(document).ready(function() { 
     setInterval(getData, 5000); 
     $('.comm').click(function() { poll = false; }); 
     $('.comm').blur(function() { poll = true; }); 
    }); 
</script> 
+0

człowiek to bardzo dobrze. Po prostu chcę tego, kliknij folder z komunikatem class (), aby interwał się wyjaśnił, a gdy fokus na textarea nie jest dłuższy, to ponownie rozpocznij interwał .... Proszę – Heart

+0

Możesz mieć zmienna na stronie, którą można użyć w getData, aby zobaczyć, czy dostanie więcej danych. Zaktualizowałem powyższą odpowiedź, aby uwzględnić nową zmienną i programy obsługi typu "kliknij/zamień". Nadzieja, która pomaga. – Sol

+0

Twój nie działa, ale zrobiłem go używając W3SCHOOLS.COM. Problem, przed którym stoję, polega na tym, że tekst musi zostać kliknięty dwukrotnie, aby zatrzymać interwał. Kod jest tutaj: – Heart

0

przeciwieństwie JavaScript, PHP jest wykonywany po stronie serwera. W PHP nie ma funkcji setTimeout. Możesz zbliżyć się za pomocą cronjobs - lub innych skryptów PHP - które wywołują twoje skrypty.

+0

, aby uzyskać funkcjonalność strony aktualizującej, spójrz na rozwiązanie w systemie Solcheas. z pytania nie było jednoznaczne, co chciałeś;) –