Existenz einer URL überprüfen - mit Timeout

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Stroganoff
Mitglied
Beiträge: 2
Registriert: 01.02.2006 15:52

Existenz einer URL überprüfen - mit Timeout

Beitrag von Stroganoff »

Hallo Forum, ich brauche Hilfe.

Ich habe mehrere Apache-Server die nur maximal zwei Clients gleichzeitig bedienen dürfen. Ich möchte auf einem extra Server per PHP eine Übersichtsseite darstellen, auf der der Benutzer erkennen kann, welcher der der Apache-Server momentan verfügbar, also nicht mit zwei Clients ausgelastet ist.
Das ganze findet in einer LAN-Umgebung statt, wo viele Clients mehrere Gigabyte große Dateien per HTTP ziehen sollen.

Das Problem ist: Wenn ein dritter Client (das PHP-Script) auf einen der ausgelasteten Apache-Server zugreifen möchte, wird dieser in die Warteschleife gelegt. Das Script hängt nun solange bis alle Apache-Server wieder frei sind, was den ganzen Sinn der Status-Übersichtsseite ja ad absurdum führt. Das Script soll anzeigen, welcher der Server gerade ausgelastet ist und welcher frei ist.

Ich bin noch ein blutiger PHP-Anfänger und habe es bis jetzt mit diesen beiden Funktionen versucht:

Diese Funktion öffnet eine kleine Text-Datei auf dem Sever und vergleicht ihren Inhalt mit einer vorgegebenen Variable.

Code: Alles auswählen

function check($url, $recip) {
	$arrText = file($url);
	for ($i=0; $i<count($arrText); $i++) {
		$text = $text . $arrText[$i];
	}
	if (eregi($recip, $text)) {
		return true;
	} else {
		return false;
	}
Diese Funktion überprüft, ob eine bestimmte Datei existenz ist:

Code: Alles auswählen

function check($url, $maximumRedirections = null, $currentRedirection = 0)
{
   $result = false;
   set_time_limit(3);
   $contents = @file_get_contents($url);
  
   // Check if we need to go somewhere else
  
   if (isset($contents) && is_string($contents))
   {
       preg_match_all('/<[\s]*meta[\s]*http-equiv="?REFRESH"?' . '[\s]*content="?[0-9]*;[\s]*URL[\s]*=[\s]*([^>"]*)"?' . '[\s]*[\/]?[\s]*>/si', $contents, $match);
      
       if (isset($match) && is_array($match) && count($match) == 2 && count($match[1]) == 1)
       {
           if (!isset($maximumRedirections) || $currentRedirection < $maximumRedirections)
           {
               return getUrlContents($match[1][0], $maximumRedirections, ++$currentRedirection);
           }
          
           return false;
       }
       else
       {
           return true;
       }
   }
  
   
}

Beide Funktionen lassen das Script hängen, wenn einer der Apache-Download-Server ausgelastet ist.

Wie kann ich eine Timeout-Prüfung einbauen, welche die Funktion nach zwei Sekunden mit "return false;" beendet?

oder:

Wie kann ich Apache so konfigurieren, dass dem Client signalisiert, dass dieser sich in einer Warteschleife befindet?

oder:

Gibt es sonst irgendwelche Lösungen zur Realisierung dieser von mir angestrebten Status-Übersichtsseite?


Ich wäre über jede Art der Hilfestellung erfreut und zutiefst dankbar.
Den sachdienlichsten Hinweis würde ich auch gerne mit 15€ entlohnen (PayPal oder Überweisung).
Stroganoff
Mitglied
Beiträge: 2
Registriert: 01.02.2006 15:52

Beitrag von Stroganoff »

Es hat sich erledigt.
Ich benutze nun wieder FTP für die Download-Server, nachdem ich endlich einen Windows-FTP-Server gefunden habe, der in der Lage ist, Dateien über 4GB zu verschicken.
Mein eigenes Script funktioniert mit FTP, da FTP bei Auslastung eine Fehlermeldung ausgibt, die das Script entsprechend verwerten kann, statt in der Apache-Queue hängen zu bleiben.

Entschuldigt bitte die Umstände.
Antworten

Zurück zu „Coding & Technik“