PHP Abfrage 3 mal wiederholen und dann erst alternativen Text ausgeben!

Belee

Lt. Commander
Registriert
Dez. 2006
Beiträge
1.518
Hallo Leute

Habe folgenden Code und ich blockiere aktuell etwas:
PHP:
$chan1  = array_map('rtrim', file('data/np-eins.txt'));
 
if (empty($chan1)) {
$chan1  = array("Alternativer Text","Nummer","Tag");
}

Nun folgendes, wie baue ich hier jetzt eine Schleife ein damit die Abfrage ob die Datei leer ist 3 mal wiederholt wird bevor $chan1 mit alternativen Text gefüllt wird?

Das Problem ist nämlich das ein anderes Script via ConJob jede Minuten einen Text holt,
alles bestens bis hier aber, da ich die Abfrage hier oben über Ajax alle 30 Sekunden aktiviere kommt es dann vor das die Abfrage genau dann stattfindet wenn der CronJob bzw. das Script die Datei beschreibt und dann ist diese für das Script hier leer bzw gesperrt da von Perl-Script in Benutzung.

Darum dachte ich, ich wiederhole die Abfrage 3 mal und hoffe das die paar Milisekunden mehr ausreichen bis das CronJob Script die Datei wieder geschlossen hat und sie dann für dieses Script normal verfügbar ist, wenn nicht hab ich halt Pech gehabt und muss das ganze irgendwann auf SQL umstellen.
Doch bis dahin wollte ich es so probieren und hoffe jemand hat eine Idee? mit Schleifen habe ich es nicht so da ich noch nie eine benötigt habe, habe paar Stunden dran gesessen aber irgendwie funktinierte nichts so wie gewünscht.

Danke.

Gruß
Belee
 
Hi,

du kannst - wenn die Anwendung nicht extrem Zeitkritisch ist - auch Sleep verwenden und dann einfach deine Anfrage wiederholen. Wenn Datei leer -> Sleep -> neuer Versuch -> wenn immer noch leer -> dann wirklich leer und dann alternativer Text.

VG,
Mad
 
Du meinst..

PHP:
 if (empty($chan1)) {
 sleep(1);
 }      
  if (empty($chan1)) {
  $chan1  = array(''text'',''text'');
 }
.....

Zeitkritisch ist das ganze nicht es wird immer nur eine Textdatei eingelesen, maximal 2kb.
 
Hi,

genau so in die Richtung meine ich. Könnte gut sein dass es gleich so klappt.

VG,
Mad
 
hm.. 2 Sekunden eingestellt, scheint aber nicht zu funktionieren. Was ist eigentlich das Limit? Das vom Hoster vorgeschriebene Scriptausführungslimit?
Ergänzung ()

Kann es sein dass das so garnicht funktionierne kann? denn $chan1 ist ja bereits leer und wurde ja nicht erneut überschrieben. Ich müsste also nach sleep() $chan1 nochmal neu befüllen, oder nicht?

Also so...

PHP:
$chan1  = array_map('rtrim', file('data/np-eins.txt'));
 
if (empty($chan1)) {
sleep(2);
$chan1  = array_map('rtrim', file('data/np-eins.txt'));
}
if (empty($chan1)) {
$chan1  = array("Alternativer Text","Nummer","Tag");
}

oder?
 
Zuletzt bearbeitet:
Hi,

ja natürlich, neu befüllen musst du schon. Sonst prüfst du das gleiche Objekt nochmal.

Limits sind idR die vom Hoster, bzw vom Server vorgegebenen, richtig.

VG,
Mad
 
Alles klar danke, es funktioniert jetzt sogar mit einer halben Sekunde ;)
 
Zurück
Oben