Samoczynne wywoływanie się kodu PHP

0

Witam,
Chcę aby pewien kawałek kodu (funkcja) wywoływana była automatycznie co określony czas, np. 10 min. Funkcja ta ma automatycznie np. co 10 minut wykonywać pewne operacje na bazie danych - automatycznie czyli samoczynnie bez czyjejkolwiek ingerencji, co 10 min czyli 6 razy w ciągu godziny i 144 razy w ciągu doby :)

W jaki sposób można tego dokonać ?

Dodam, że mam dostęp do zwykłego konta z php i mysql.

Do wykorzystania php i baza danych na mysql.
Dziękuje za pomoc i pozdrawiam.

0

Przydałby Ci się dostęp do crona, lub dostęp do innej maszyny, na której mógłbyś wykonywać okresowo jakieś funkcje, inaczej tego nie zrobisz.

0

Zawsze można z jakiegoś webcrona skorzystać, ale to raczej mało fajne rozwiązanie. Czasami też można też uniknąć w ogóle stosowania crona. Jeśli na przykład piszesz grę internetową w której graczowi co godzinę odnawia się 10 punktów życia, to wcale nie musisz tego robić cronem, jeśli ktoś wejdzie np. po 3 godzinach to możesz obliczyć ile czasu minęło od ostatniego wejścia i wykonać określone operacje konkretną ilość razy. Oczywiście wszystko zależy od problemu.

0

Dzięki za odpowiedzi.

sirkruk, nie ma opcji uzyskania takiego dostępu, nawet nie będe prosił administratora o to, bo mnie wyśmieje. jak wspomniałem korzystam ze zwykłego konta hostingowego, a nie jest to nawet żadna klasa biznes czy coś innego i póki co muszę na takim ciągnąć.

Niestety rozwiązanie jakie zaproponowałeś Demonical Monk w moim przypadku nie wypali, bo operacje muszą być wykonywane na całej bazie danych, co 5-10 minut i tego nie mogę odrzucić.

W najgorszym przypadku odwale prowizorkę i z prywatnego komputera, który jest włączony 24/7 ustawie lub napiszę jakąś mini aplikację, która będzie wywoływała daną funkcję poprzez link. W przyszłości planuję migrację na ASP.NET i dedyka z windows server, ale póki co muszę jakoś sobie radzić z powodu braku odpowiednich funduszy i wystarczającej wiedzy o ASP.

Jeżeli ktoś ma coś do dodania to bardzo proszę o posty.

0
Delli napisał(a)

sirkruk, nie ma opcji uzyskania takiego dostępu, nawet nie będe prosił administratora o to, bo mnie wyśmieje. jak wspomniałem korzystam ze zwykłego konta hostingowego, a nie jest to nawet żadna klasa biznes czy coś innego i póki co muszę na takim ciągnąć.

Czy ja wiem... Mam konto za które płacę bodajże 40 PLN / rok na pierwszym lepszym hostingu i jest cron w pakiecie. Od wielu lat to standard, chyba że trafisz na cholernych zdzierców.

0

a pomyślałeś żeby skorzystać z opcji bazy danych?

zrób tabelę "system" z polem "lastcron" typu INT (11)

zakładam, że twoja strona jest odwiedzana non stop, jeżeli nie to można np skorzystać z opcji jakie daje travka.pl ;] ale trzeba trochę punktów kupić/uzbierać

w każdym razie.. w pliku index pobierasz rekord z tabeli "system" np

$cron = mysql_fetch_array(mysql_query("select * from system"));

jeżeli "lastcron" minęło np 5 minut (300sekund) to:

$czas = time();
if($cron['lastcron'] + 300 <  $czas ){
    //minęło 5 minut, wykonaj akcję crona
    mysql_query("update system set lastcron = ".$czas);
    //tu poniżej robisz kod, co się powunien wywoływać co ileś minut

}

inne rozwiązanie jest możliwe jeżeli masz mysql 5
masz dostęp wtedy do crona z poziomu samej bazy danych ;] tylko tu trzeba teochę wiedzy o procedurach w bazie danych

http://blog.gabrym.pl/bazy-danych/event-scheduler-cron-w-mysql/

i jeszcze jedno, jakbys juz chcial wykorzystac swojego kompa do tego pseudocrona to zrob to tak:

stworz plik cronAXZUTYQ.php (jakas unikalna nazwa, ktora tylko ty znasz) i w nim:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head>
<meta http-equiv='refresh' content='301'> 
</head>
<body>
<?php
//tu wklej kod połączenia z bazą np
$polacz = mysql_connect('host', 'user', 'haslo') or die('niepoprawne dane do polaczenia z baza');
mysql_select_db('nazwabazy',$polacz) or die('wybrano nieistniejaca baze danych');
mysql_query("SET NAMES 'utf8'");


$cron = mysql_fetch_array(mysql_query("select * from system"));
$czas = time();
if($cron['lastcron'] + 300 <  $czas ){
    //minęło 5 minut, wykonaj akcję crona
    mysql_query("update system set lastcron = ".$czas);
    //tu poniżej robisz kod, co się powunien wywoływać co ileś minut
 
}
?>
</body>
</html>

na kompie odpalasz przegladarke i wklepujesz adres: www.twojastrona.pl/cronAXZUTYQ.php
content='301' sprawia, że strona sama będzie się przeładowywać, a w środku masz dodatkowo sprawdzanie, czy na pewno minęło 300sek (5minut)

i ponownie dodam cos ;p

opcja uzywania wlasnego kompa jako odpalanie crona jest ogolnie pozbawiona sensu bo koszta przekrosza efekty (okolo 300zl rocznie przy wylaczonym monitorze, zalezy od konfiguracji) a za taka kase to mozesz miec wlasny dobry serwer z prawami admina itd

0

Dziękuje Wam za posty, bardzo mi pomogliście!

1 użytkowników online, w tym zalogowanych: 0, gości: 1