Ich muss eine Sperrdatei erstellen, die nicht von anderen Skripten oder Prozessen gelöscht werden kann. Ich versuchte dies:So sperren Sie eine Datei gegen externe Prozesse
$f = fopen($pidFile, 'w');
fwrite($f, getmypid());
flock($f, LOCK_EX);
aber andere Verfahren aus dem aktuellen Benutzer gestartet kann die $f
Datei, selbst wenn die Datei-Handle löschen noch durch das laufende Skript geöffnet wird. Wie man dieses Problem löst und andere (d. H. Nicht-PHP-Prozesse zu) daran hindert, die Datei zu löschen? Und die Sperre wird automatisch freigegeben, wenn der Prozess beendet wird? Alle ähnlichen Fragen enden mit einer RTM flock(), aber keine von ihnen beantwortet, wie eine Datei gegen externe Prozesse gesperrt wird.
OS ist Linux 2.6.32-431.el6.x86_64
'flock' ist" beratend ", nicht streng. Verwenden Sie [zusätzliche Prüfung] (http://stackoverflow.com/questions/20771824/php-test-if-file-islocked), bevor Sie etwas mit der Datei in Ihren Skripten machen. Dies funktioniert, wenn es um eigene PHP-Skripte geht. Wenn es um externe Prozesse geht, kann 'flock' den Fall nicht retten. –
Wie ich in meiner Frage erwähnt habe, muss ich die Datei sperren, um das Löschen von externen Prozessen zu verhindern (d. H. Auch Nicht-PHP) –