Frage

Ich verwende File (), um eine Datei wie ein Array mit Registerkarten durchzulesen. Ich möchte die Datei sperren, aber ich kann Opfer () an der Datei nicht arbeiten lassen. Ist es möglich, dies zu tun? Wenn das so ist, wie? Wenn nicht, sperrt die Datei () die Datei vom Start aus und lindert potenzielle gemeinsame Nutzungsprobleme?

War es hilfreich?

Lösung

Entsprechend die Dokumentation (Insbesondere die Kommentare) wird keine Datei gelesen, die über die übertragen wurde flock.

Sie haben 2 Alternativen.

  1. Lesen Sie die Datei mit fgets (ohne Schecks auf Fehler):

    $f = fopen($file, 'r');
    flock($f, LOCK_SH);
    $data = array();
    while ($row = fgets($f)) {
        $data[] = $row;
    }
    flock($f, LOCK_UN);
    fclose($f);
    
  2. Lesen Sie die Datei mit file() und mit einer separaten "Lockfile":

    $f = fopen($file . '.lock', 'w');
    flock($f, LOCK_SH);
    $data = file($file);
    flock($f, LOCK_UN);
    fclose($f);
    unlink($file . '.lock');
    
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top