php Synchronisieren

jer1cho

Mitglied
wie mache ich es, dass ein bestimmter code teil von einem script nur von einem script gleichzeitig aufgerufen werden kann?
 
Zuletzt bearbeitet:
Es gibt hie eine sehr trickreiche Lösung, welche jedoch MySQL Zugang erfordert. Mit Sicherheit gibt es ähnliche Lösungen auch mit eigenen Implementierungen auf Filebasis, aber das soll jetzt nicht Thema sein:

1.) in MySQL einen LOCK anfordern
PHP:
$lock_id   = 'mein_eindeutiger_logkey_1321241324124';
$wartezeit = 0; // maximale Wartezeit zum Anfordern des Locks in Sekunden

$res = mysql_query ("SELECT GET_LOCK('$lock_id', '$wartezeit')");
list ($habe_lock_erhalten) = mysql_fetch_row ($res);
mysql_free_result ($res);

2.) in $habe_lock_erhalten steckt nun das Ergebnis des Versuches, einen Lock anzufordern. Wurde der Lock erfolgreich geholt, Code ausführen und anschließend den Lock wieder freigeben.
PHP:
if ($habe_lock_erhalten)
{
	// führe den ganzen geschützen Code aus
	// blub blub

	// am Ende den Lock wieder freigeben
	mysql_query ("DO RELEASE_LOCK('$lock_id')");
}

ACHTUNG: bei persistenten Connections

Grüße Bloddy
 
Zurück