Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Zadanie wykonane tylko raz o danej godzinie.
Forum PHP.pl > Forum > Przedszkole
KamCiu
Witam próbowałem napisać skrypt, który o godzinie 24 wybierze losowy element z bazy danych, wpisze do nowej tabeli i zawartość będzie wyświetlał przez kolejne 24 godziny.
W następny dzień o 24 znowu wylosuje i wpisze dane, a następnie będzie wyświetlać nowy element.
Ustawiłem poprzez
  1. if ($godzina == 24){ //pobieraj i wpisuj// }
no ale operacja była wykonywana wielokrotnie przez całą godzinę.
Jak zrobić poprzez php, żeby była wykonywana tylko raz?
pmir13
Musisz wykonać oddzielny skrypt php o określonej godzinie, w środku już nie sprawdzając która jest godzina.
Potrzebujesz wpis w /etc/crontab lub w podobnym pliku w zależności od dystrybucji albo inny program umożliwiający zaplanowanie zadań.
KamCiu
Właśnie też kombinowałem z tym poprzez komendę
"10 * * * * wget http://yourdomain.com/file.php > output.log" ale nie działało bo nie zapisywało tego pliku output.log w ogóle.
pmir13
1. Sprawdź czy to podane wget działa poprawnie z linii poleceń
2. Sprawdź uprawnienia, może cron nie może zapisywać tam gdzie chcesz.
3. Uruchomienie raz o północy to 0 0 * * *
KamCiu
Ja to obsługuje poprzez Cpanel w którym mam hosting i tam jest wbudowany CronTabs i nie mam dostępu do wiersza poleceń.
Co do uprawnień to jest to możliwe.
bercow
To moze wykonac go raz na 24, przy pierwszym uruchomieniem skryptu (PHP), dodac dzien ostatniego wpisu, i po sprawie

mniej wiecej takie cos
  1. <?php
  2.  
  3. $query = mysql_query("SELECT * FROM tabela") or die('Błąd zapytania'); //zakladam, ze mamy date ostatniego wpisu
  4. $a = mysql_fetch_assoc($query2);
  5. $date = date('Y-m-d');
  6. if ( $date <> $a['date']) {
  7. .........
  8. }
  9.  
  10. ?>
KamCiu
Wykonałem to w ten sposób:
  1. $godzina = date ("H");
  2.  
  3. $dzisiajj=dbquery("SELECT potd_date FROM fusion15534_potd WHERE id = 1");
  4. $dzisiajj_arr=dbarray($dzisiajj);
  5.  
  6. $date = date('d.m.Y');
  7.  
  8.  
  9. $result=dbquery("SELECT photo_filename, photo_datestamp, ta.album_id, album_title, photo_id FROM ".$db_prefix."photo_albums ta ".
  10. "INNER JOIN ".$db_prefix."photos USING (album_id) ORDER BY RAND() LIMIT 1");
  11. $data=dbarray($result);
  12.  
  13.  
  14. if ($date != $dzisiajj_arr['potd_date'] && $godzina == 24) {
  15.  
  16. $fotka=dbquery("UPDATE fusion15534_potd SET potd_date='".$date."', potd_id='".$data['photo_id']."', potd_album_id='".$data['album_id']."', potd_filename='".$data['photo_filename']."' WHERE id=1");
  17. }
  18.  
  19.  


Sprawdziłem ,działa smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.