Einzelnen Beitrag anzeigen
  #5  
Alt 25.05.2003, 14:45:03
Benutzerbild von Matt
Matt Matt ist offline
Member
 
Registriert seit: Mar 2002
Ort: Port 80, localhost-city, 127/0/0/1
Beiträge: 878
nunja.. du kannst es auch so machen (aber ich weiss nicht, ob das die provider zulassen, bzw. ob sie dich nicht kicken, wenn sie draufkommen: Mach eine cronjob datei, die du einmal aufrufst, und gegen ALLE anderen aufrufe schützt (verbiete nachher generell das aufrufen der datei mittels htacces! FÜR ABSOLUT JEDEN!)
in der stteht drin:

Code:
ignore_user_abort(true); #ein user abbruch lässt das script trotzdem weiterlaufen!
ini_set("max_execution_time",0); #wird nie aufhören
register_tick_function("mychronjobs");
declare(ticks=1)
{
while(1)
{
sleep(60*60); #1 Stunde pause
}
}

function mychronjobs()
{
$file=fopen("state.txt","r");
$contents = fread ($file, filesize ($filename));
if($contents="run")
{
print "tick ausgeführt";
#Hier gehört der code für deinen Ticker rein!

}elseif($contents="shutdown") { exit();}


}
Dieser code ist SCHWER Experimentell. Ich habe noch nie tick functions und declares in PHP gebraucht, es kann auch gut sein, dass das nicht mal ansatzweise funktioniert, das müsste es aber...
Na gut, was macht das ding?
zuerst einmal wird der user abort ignoriert - wenn der user auf "abbrechen" drückt, wird das skript trotzdem weiter ausgeführt, und zwar für alle zeiten (max_execution_time ist nämlich unendlich) Ok, mit register_tick_function setzt man fest, welche funktion bei einem tick aufgerufen werden soll (bis jetzt ist noch unklar, was ein tick ist.)
Der tick wird mit declar definiert, und zwar: für jedes statement, das ausgeführt werden soll, wird einmal ein tick ausgeführt. das ganze geht in die schleife hinein --> sleep() ist ein statement --> tick wird ausgeführt (funktion mychronjobs() wird aufgerufen und abgearbeitet), dannach gibt das script mal ne stunde (60 mal 60 sekunden) ne ruhe, dann fängt die schleife wieder von vorne an -> wieder ein statement, wieder ein tick!
Dieser Ticker wird bis zum tag der jüngsten gerichts laufen, ohne abgebrochen werden zu könenn - du kannst ihn auch nicht kontrollieren. Deshalb hab ich in die tick funktion die datei state.txt eingebaut. Damit ein Tick ausgeführt wird, muss in der datei "run" stehen (und zwar GENAU run). Wenn das nicht drinsteht, findet der tick nicht statt (also eine pause im ticker) Wenn du deinen Ticker "Beenden" möchtest (also die ausführung des scriptes ein für alle mal abdrehen willst, dann muss in der datei "shutdown" stehen. Das beendet das komplette script sofort.

Aber noch ne warnung: Lies dir UMBEDINGT die entsprechenden Manualeinträge aus PHP.net durch (ich häng sie gleich an) und probier das ganze zuerst einmal zu hause, und stell sicher, dass es ordnungsgemäß funktioniert!)

www.php.net/ignore_user_abort
www.php.net/ini_set
www.php.net/sleep
www.php.net/register_tick_function
www.php.net/declare <-- SEHR wichtig!
www.php.net/fopen
www.php.net/fread

Wie gesagt, ich kann dir nicht versprechen, dass provider das zulassen (und selbst, wenn sie es nicht verhindern, dass sie es dir beenden, wenn sie draufkommen)
Wenn der server oder Apache restartet wird, hören die Ticks natürlich auch auf, bedenke das!
Mit Zitat antworten