Tom: Locking auf Windows-Systemen, Helfer gesucht

Beitrag lesen

Hello,

<?php #### exclusive_lock.php ####

Testet Locking-Verhalten

ini_set("track_errors","1");
set_time_limit(0);

echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.1 Transitional//EN">\n";
echo "<HTML>\n";
echo "<HEAD>\n";
echo "  <TITLE>Dauerlauf</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";

$ok = ignore_user_abort();
if ($ok)
{
  echo "Abbruch durch Benutzer wird ignoriert<br />";
}
else
{
  echo "Abbruch durch Benutzer stoppt das Script<br />";
}
flush();

diese Schleife läuft solange, bis der Client einen Abbruch sendet

es wird eine Datei angelegt /geöffnet und dann gesperrt.

$fh = fopen('lockversuch.txt','a+');
if (!$fh)
{
  echo "Datei konnte nicht angelegt/geöffnet werden";
  exit;
}

$lock_ok = flock($fh,LOCK_EX + LOCK_NB);
if (!$lock_ok)
{
  echo "Datei konnte nicht gesperrt werden<br />\n";
  exit;
}
else
{
  echo "Datei wurde im exclusive Mode gesperrt<br />\n";
  echo "Freigabe erfolgt 3 Sekunden nach Schließen des Fensters oder STOPP<br/>\n";
}

while (!connection_aborted())
{
  echo getmypid()." ".time()." lebt noch<br />";
  flush();
  sleep(3);
}

echo "</body>\n";
echo "</html>";
?>
---------------------------------------------------------------------------
<?php #### shared_lock.php ####

Testet Locking-Verhalten

ini_set("track_errors","1");
set_time_limit(0);

echo "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.1 Transitional//EN">\n";
echo "<HTML>\n";
echo "<HEAD>\n";
echo "  <TITLE>Dauerlauf</TITLE>\n";
echo "</HEAD>\n";
echo "<BODY>\n";

$ok = ignore_user_abort();
if ($ok)
{
  echo "Abbruch durch Benutzer wird ignoriert<br />";
}
else
{
  echo "Abbruch durch Benutzer stoppt das Script<br />";
}
flush();

diese Schleife läuft solange, bis der Client einen Abbruch sendet

es wird eine Datei angelegt /geöffnet und dann gesperrt.

$fh = fopen('lockversuch.txt','a+');
if (!$fh)
{
  echo "Datei konnte nicht angelegt/geöffnet werden";
  exit;
}

$lock_ok = flock($fh,LOCK_SH + LOCK_NB);
if (!$lock_ok)
{
  echo "Datei konnte nicht gesperrt werden<br />\n";
  exit;
}
else
{
  echo "Datei wurde im shared Mode gesperrt<br />\n";
  echo "Freigabe erfolgt 3 Sekunden nach Schließen des Fensters oder STOPP<br/>\n";
}

while (!connection_aborted())
{
  echo getmypid()." ".time()." lebt noch<br />";
  flush();
  sleep(3);
}

echo "</body>\n";
echo "</html>";
?>
---------------------------------------------------------------------------

Anleitung:

beide Scripte in ein verzeich is kopieren, in dem PHP Schreibrechte (Anlegen von Dateien) hat.
Dann erst das shared_lock starten und Meldung betrachten.
Wenn im Fenster "xxx <zeit> lebt noch" erscheint, dasselbe Script in einem zweiten Fenster
nochmal starten. Nun muss wieder "yyy <zeit> lebt noch" erscheinen. Also eine andere PID.

Wenn man nun das exclusive_lock.php in einem dritten Fesnter startet, dann muss das mit einem "Datei konnte nicht gesperrt werden" quitiert werden.

Drückt man nun in beiden shared_lock-Fesntern den Stopp-Button des Fensters, dann sollte es ca. drei Sekunden später möglich sein, im exclusive_lock-Fenter durch Reload-Button des Fensters die Meldung "zzz <zeit> lebt noch" zu erzeugen.

Wenn man nun in einem der shared-Fenster wieder relaod drückt, müsste "Datei konnte nicht gesperrt werden" erscheinen.

Ich bräuchte Ergebnisse für Win98SE, für WIN 2000, für Win XP und alle folgenden.

Freue mich auf Eure Unterstützung

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau