Welche Art Timelimit zu umgehen ist die bessere?

Descartes

Erfahrenes Mitglied
Hallo!

Für einen Subdomaindienst möchte ich die index Seite der Mitglieder regelmäßig nach bestimmten Wörtern (Bad Words) durchsuchen lassen.

Über dieses Forum habe ich auf php.net diese Funktion gefunden:

PHP:
function fetchURL( $url ) {
   $url_parsed = parse_url($url);
   $host = $url_parsed["host"];
   $port = $url_parsed["port"];
   if ($port==0)
       $port = 80;
   $path = $url_parsed["path"];
   if ($url_parsed["query"] != "")
       $path .= "?".$url_parsed["query"];

   $out = "GET $path HTTP/1.0\r\nHost: $host\r\n\r\n";

   $fp = fsockopen($host, $port, $errno, $errstr, 30);

   fwrite($fp, $out);
   $body = false;
   while (!feof($fp)) {
       $s = fgets($fp, 1024);
       if ( $body )
           $in .= $s;
       if ( $s == "\r\n" )
           $body = true;
   }
  
   fclose($fp);
  
   return $in;
}

Mein größeres Problem ist, das ich, sobald ein Mitglied überprüft wurde, das Ergebnis ausgeben möchte und dann das nächste Mitglied überprüft werden soll, so dass sich nach und nach eine Tabelle mit allen Mitgliedern und deren "Seitenstatus" in einer Liste ergibt.

Lasse ich alle Mitglieder in einem Skriptaufruf abarbeiten, kann ich mir vorstellen, dass nach ein paar Überprüfungen ein Timeout (Standard 30 s) erfolgt, da das "holen" der Seite ja schon einen Moment dauert und je nach Mitgliederzahl viele Seiten zu holen sind. Für das Skript ist das dann doch nur ein einziger Aufruf ...

Kann ich also das Skript sich selber neu aufrufen lassen und so den Timeout verhindern?
Es wäre ja schon ziemlich umständlich das über einen Cron Job zu machen, oder?

Vielleicht sollte ich besser nach jedem Skript- bzw. Funktionsaufruf set_time_limit() verwenden. Wenn PHP im Safemode läuft, hat set_time_limit() aber keinen Effekt und ich will den Safemode eigentlich bestehen lassen.

Im Forum habe ich auch die Möglichkeit gefunden mit set_ini() die max_execution_time zu beeinflußen.
Ist es möglich, diese nur für diese Funktion zu setzen und später wieder zurückzusetzen - die Direktive wirkt sich doch global aus, oder?

Gefunden habe ich auch die Funktion socket_set_timeout(), aber ich glaube die betrifft den nur den einzelnen Verbindungsaufbau zu einer Seite.

Wie kann ich also das Timelimit umgehen, bis alle Mitgliedsseiten abgearbeitet wurden?
Wie löst ihr das am sinnvollsten?

Vielen Dank für ein paar Anregungen!

Grüße

Martin
 
Zurück