4

file_put_contents ()のドキュメントには、次のように記載されています。

ファイル_追加:

追加はアトミックであり、ロックする理由がないため、LOCK_EX とは相互に排他的です。

LOCK_EX :

FILE_APPEND と相互に排他的です。

それでも、以下の数行に次のコードが表示されます。

<?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);
?>

では、FILE_APPEND フラグと LOCK_EX フラグは相互に排他的ですか? はいの場合、なぜ彼らは例でそれを使用していますか? これは不適切なドキュメンテーションのケースですか?

ご意見ありがとうございます。

4

2 に答える 2

4

@ karim79 が言ったように、これはマニュアルの誤りでした:バグ #49329を参照してください。これは、この質問/回答を見て報告したもので、数分前に修正/クローズされました。

(オンライン版マニュアルへの反映には時間がかかりますが、ソースは修正済みです)

于 2009-09-07T06:53:44.720 に答える
3

それはちょうど悪いドキュメンテーションです。マニュアルには次のように明確に記載されています。

FILE_APPEND: ファイル filename が既に存在する場合は、データを上書きするのではなく、ファイルに追加します。追加はアトミックであり、ロックする理由がないため、LOCK_EX とは相互に排他的です。

LOCK_EX処置: 書き込み中にファイルの排他ロックを取得してください。FILE_APPEND と相互に排他的です。

そして、あなたが話す例:

<?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);
?>

この例をコーディングした人は、「相互に排他的」の意味を誤解した、秘密の文書化されていない動作を生み出しているようです。

于 2009-08-22T03:40:35.653 に答える