Tôi đang sử dụng:Làm cách nào để sử dụng file_put_contents() với FILE_APPEND | LOCK_EX an toàn?
file_put_contents("peopleList.txt", $person, FILE_APPEND | LOCK_EX);
ghi vào cuối của một tập tin và để đảm bảo không ai khác (hoặc script) cũng được ghi vào cùng một tập tin cùng một lúc.
PHP manual cho biết sẽ trả về giá trị giả nếu không thành công.
Nếu nó không thể có được một khóa trên tập tin, nó sẽ thất bại hoặc tiếp tục cố gắng cho đến khi nó có thể? Nếu nó không thành công khi không khóa được, thì cách tốt nhất để đảm bảo dữ liệu được viết là gì?
Có lẽ lặp lại hàm trong một vòng lặp while cho đến khi nó không trả về false (cringe) hoặc đơn giản là cung cấp cho người dùng (người truy cập trang web) một số loại GUI yêu cầu họ thử lại?
Apache sinh ra một chuỗi trong đó tiến trình PHP được thực hiện. Nhiều người dùng = nhiều tiến trình PHP. Quá trình lấy khóa là người duy nhất được phép làm việc với tệp. Tất cả các quá trình khác sẽ nhận được một lỗi từ hàm file_put_contents và file_put_contents do những người dùng đó sẽ không viết bất cứ thứ gì vào tệp. Điều đó có nghĩa là trong khi 1 người dùng đang viết, những người khác đang bị từ chối và hàm sẽ trả về boolean 'false'. – Mjh
Lý do tại sao LOCK_EX tồn tại là một chủ đề khác. Nếu bạn muốn ghi vào tệp bất kể, chỉ cần xóa LOCK_EX vì bạn không cần nó và người cuối cùng truy cập vào trang web/tập lệnh của bạn sẽ là người sẽ có dữ liệu được ghi vào tệp. Ngoài ra, kể từ khi bạn đang làm phụ thêm - điểm của khóa tập tin ở tất cả là gì? Chỉ cần loại bỏ nó. – Mjh
Tôi đang sử dụng LOCK_EX và FILE_APPEND cùng nhau bởi vì các tập lệnh khác có khả năng ghi vào tệp và tôi không làm những gì chúng có thể trong khi dữ liệu đang được thêm vào và ngược lại. – hozza