Endlosschleife im Hintergrund

Dieses Thema Endlosschleife im Hintergrund im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von cultsibi, 5. Apr. 2005.

Thema: Endlosschleife im Hintergrund Diesen Code habe ich im Inet gefunden. Er soll innerhalb eines bestimmten intervalls (hier sind es 10 sec.) eine...

  1. Diesen Code habe ich im Inet gefunden. Er soll innerhalb eines bestimmten intervalls (hier sind es 10 sec.) eine bestimmte Aufgabe erfüllen. In diesem Fall schreibt er jewails immer eine 1 und einen Zeilenumbruch in eine txt Datei names ausgabe.txt
    Die Anwendung wird erst gestartet, wenn man dieses Script aufruft und dazu in der Datei state.txt das Wort run steht. Wenn man später das runmit einem shutdown überschreibt und speichert soll die Anwendung beendet werden.

    Code:
    <?php
    
    	ignore_user_abort(true);
    	ini_set(max_execution_time,0);
    
    	while (1) 
    	{
    		if ( ! tickfunction() ) { exit(); }
    		sleep(10);
    	}
    
    	function tickfunction() 
    	{
    		$file = fopen(state.txt,r);
    		$ausgabe = fopen(ausgabe.txt,a);
    		$contents = fread($file, filesize(state.txt));
    
    		if ( $contents==run) 
    		{	
    
    			fwrite($ausgabe,1\n);
    
    		} elseif ( $contents==shutdown ) { return false; }
    
    		return true;
    	}
    
    ?>
    Mein Problem ist, dass er die Anwendung nicht beendet. Schreibt man nämlich später noch einmal ein run in die state.txt, so fügt er weiterhin alle 10 sec. eine 1 und einen Zeilenumbruch hinzu, obwohl das Script nicht wieder neu aufgerufen wurde...
    Mein Ziel ist es, dass dieser Prozess komplett beendet wird, und nicht stillschweigend im Hintergrund weiter läuft.
    Bitte um Fehleranalyse und Verbesserung ;)
     
  2. Versuchs mal mit
    Code:
    if (!tickfunction()) break;
    BTW... du öffnest in jedem Schleifendurchlauf die beiden Text-Dateien (state und ausgabe), diese sollten dann aber auch wieder geschlossen werden, also
    Code:
    function tickfunction() {
     $file = fopen(state.txt,r);
     $ausgabe = fopen(ausgabe.txt,a);
     $contents = fread($file, filesize(state.txt));
     fclose($file);
    
     if ( $contents==run) {
      fwrite($ausgabe,1\n);
     }
     elseif ( $contents==shutdown ) return false;
     fclose($ausgabe);
     return true;
    }
    Würde sie aber auch generell etwas umschreiben:
    Code:
    function tickfunction() {
     $file = fopen(state.txt,r);
     $contents = fread($file, filesize(state.txt));
     fclose($file);
    
     if ( $contents==run) {
      $ausgabe = fopen(ausgabe.txt,a);
      fwrite($ausgabe,1\n);
      fclose($ausgabe);
      return true;
     }
     return false;
    }
    Weiss jetzt nicht genau, obs dir weiterhilft... probierst mal aus...

    M.
     
  3. klasse, es funktioniert *freu*

    cronjob wäre zwar einfacher, aber leider habe ich keinen shell Zugriff
     
  4. Dann schau mal auf http://www.cronjob.de vorbei

    M.
     
Die Seite wird geladen...

Endlosschleife im Hintergrund - Ähnliche Themen

Forum Datum
Endlosschleife bei mp4-Dateien mit Win-Mediaplayer Windows 7 Forum 13. Aug. 2016
Win7 bootet nur noch über die Starthilfe in Endlosschleife Windows 7 Forum 13. Mai 2011
PowerPoint 2007 - Endlosschleife geht nicht :( Microsoft Office Suite 9. Nov. 2010
Desktop-PC gerät beim Start in Endlosschleife Windows XP Forum 21. Okt. 2009
Vista Update in Endlosschleife Windows-Updates 24. Apr. 2009