2009-08-22 17 views
3

Auf der file_put_contents() Dokumentation, sagt er folgendes:Sich gegenseitig ausschließende Flags auf file_put_contents?

FILE_APPEND:

Unvereinbare mit LOCK_EX seit Appends Atom und somit ist es keinen Grund zu sperren.

LOCK_EX:

Unvereinbare mit FILE_APPEND.

Doch ein paar Zeilen unten ich den folgenden Code sehen:

<?php 
$file = 'people.txt'; 
// The new person to add to the file 
$person = "John Smith\n"; 
// Write the contents to the file, 
// using the FILE_APPEND flag to append the content to the end of the file 
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time 
file_put_contents($file, $person, FILE_APPEND | LOCK_EX); 
?> 

So sind die FILE_APPEND und LOCK_EX Fahnen gegenseitig aus oder nicht? Wenn ja, warum verwenden sie es im Beispiel? Ist das eine schlechte Dokumentation?

Vielen Dank für Ihre Eingabe!

+2

Ohne einen Blick zu eng, klingt wie wer auch immer das Beispiel schrieb, war nicht vertraut mit die Dokumentation. Oder vielleicht hat sich die API geändert, seit das Beispiel geschrieben wurde, und niemand hat das Beispiel aktualisiert. –

+0

Danke Mark, +1 Ich begann mich zu fragen, ob es einen obskuren Grund gab, von dem ich nichts wusste. –

+0

Dies wurde für [Fehler # 52767] (http://bugs.php.net/bug.php?id=52767) korrekt behoben. Die Flags * schließen sich * nicht gegenseitig aus. – Artefacto

Antwort

3

Das ist nur eine schlechte Dokumentation. Die manual clearly states:

FILE_APPEND: Wenn die Datei Dateiname bereits vorhanden ist, hängen die Daten an die Datei anstatt sie zu überschreiben. Gegenseitig mit LOCK_EX seit angefügt sind atomare und somit gibt es keinen Grund zu sperren.

LOCK_EX: Erwerben Sie eine exklusive Sperre auf die Datei während Sie weitergehen zu Schreiben. Gegenseitig exklusiv mit FILE_APPEND.

Und das Beispiel Sie sprechen von:

<?php 
$file = 'people.txt'; 
// The new person to add to the file 
$person = "John Smith\n"; 
// Write the contents to the file, 
// using the FILE_APPEND flag to append the content to the end of the file 
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time 
file_put_contents($file, $person, FILE_APPEND | LOCK_EX); 
?> 

Es sieht aus wie die Person, die das Beispiel codiert die Bedeutung von ‚sich gegenseitig ausschließen‘ falsch verstanden, oder, die ein Geheimnis, nicht dokumentierte bahaviour produziert.

4

Wie @karim79 said, dies war ein Fehler in der Anleitung: siehe bug #49329, die ich nach dem Sehen dieser Frage/Antwort gemeldet und vor ein paar Minuten korrigiert/geschlossen wurde.

(Es wird einige Zeit dauern, in der Online-Version des Handbuch zum Ausdruck zu kommen, aber ahs in den Quellen korrigiert)

Verwandte Themen