tôi thấy những người sử dụng bầy như thế này:php bầy và fread và fwrite
if (!$fp = fopen($file_name, 'wb'))
{
return FALSE;
}
if (flock($fp, LOCK_EX))
{
fwrite($fp, serialize($data));
flock($fp, LOCK_UN);
}
Ngoài này:
if (!$fp = @fopen($file_name, 'rb'))
{
return FALSE;
}
flock($fp, LOCK_SH);
$data = '';
if (filesize($file_name) > 0)
{
$data = unserialize(fread($fp, filesize($file_name)));
}
Nhưng không có một cơ hội mà người khác sẽ chỉnh sửa các tập tin giữa Cuộc gọi fopen
và cuộc gọi flock
? và câu hỏi tương tự cho fread
EDIT:
Để làm rõ lý do tại sao tôi yêu cầu này ... Tôi dựa câu hỏi của tôi về mã here, Trong một tình huống bộ nhớ đệm mysql, có chuyện gì để ngăn chặn 20 người từ tất cả đều có thể truy cập tập tin cùng một lúc nếu tất cả chúng có thể ở giữa fopen và đàn?
Mã đó có đáng tin cậy không?
Trong trường hợp bộ nhớ cache chỉ được sử dụng bởi tập lệnh cụ thể đó, sẽ không có gì xảy ra. Nếu ai đó sẽ đánh tập tin từ đó, chắc chắn, những điều xấu sẽ xảy ra. – favoretti
Có, nhưng nó không phải là trường hợp mà LOCK_EX, ví dụ, bằng cách nào đó lực lượng 'fread' để" trả lại không có gì ", như một bình luận đã nêu. – pilcrow
Nếu bạn đọc các ý kiến trên trang web của PHP để bầy(), nó thực sự làm, mặc dù thực tế là khóa là tư vấn. Điều đó đang được nói, bắt buộc khóa trên, ví dụ, Linux chỉ có thể đạt được trong khi làm việc với các hệ thống tập tin hỗ trợ rõ ràng nó và được gắn kết như vậy. – favoretti