Hauptmenü

Werkzeuge

Kategorien

Archiv

Tineco nass und trockensauger Einhell Shelly H&T Gen3 Liste von RTSP URLs für gängige Kameras

Nummer parallel hochzählen mit Datei Lock

Erstellt in PHP am 15. April 2021 vom Daschmi

Mit folgender php Funktion kann man eine Nummer ohne Datenbank hochzählen. Mittels flock wird sichergestellt, dass die Nummer nicht von parallelen Prozessen doppelt vergeben wird.

/**
  * @return int
  * @throws Exception
  */
function setNumber(): int {

    $file = dirname(__FILE__).'/number.txt';
    $number = 0;

    if (!file_exists($file)) {

        $fp = fopen($file, "w");

    } else {

        $fp = fopen($file, "r+");

        while (!flock($fp, LOCK_SH)) { }

        $number = intval(fread($fp, filesize($file)));

        flock($fp, LOCK_UN);

    }

    rewind($fp);

    $number ++;

    while ((!flock($fp, LOCK_EX))) { }

    ftruncate($fp, 0);
    fwrite($fp, strval($number));
    fflush($fp);
    flock($fp, LOCK_UN);

    fclose($fp);

    return $number;

}