Câu trả lời:
Trang hướng dẫn flock(2)
đã hết hạn trong một thời gian dài, nhưng kể từ đó đã được cập nhật để nói (nhấn mạnh của tôi):
Kể từ Linux 2.6.12, các máy khách NFS hỗ trợ các khóa flock () bằng cách mô phỏng chúng dưới dạng các khóa phạm vi byte trên toàn bộ tệp. Điều này có nghĩa là các khóa fcntl (2) và flock () tương tác với nhau qua NFS. Kể từ Linux 2.6.37, kernel hỗ trợ chế độ tương thích cho phép khóa flock () (và cả khóa vùng byte fcntl (2)) được coi là cục bộ; xem phần thảo luận về tùy chọn local_lock trong nfs (5).
Đó là từ trang web chính thức của trang man, http://man7.org/linux/man-pages/man2/flock.2.html hiển thị phiên bản mới từ trang man 4,00
Linux 2.6.12 được phát hành năm 2005.
Điều này ban đầu có nghĩa là một nhận xét về câu trả lời của janneb, nhưng tôi không có tiếng tăm vào thời điểm đó. Bản cập nhật doc đã xảy ra vào năm 2014: http://git.kernel.org/cgit/docs/man-pages/man-pages.git/commit/man2/flock.2?id=e449654fdb3f19aafc569df47d12bffdf6276236
Tôi không biết flock()
chức năng PHP được triển khai như thế nào , nhưng giả sử đó là một giao diện cho tòa nhà flock()
, thì nó không hoạt động ở tất cả các NFS. Từ flock()
trang hướng dẫn:
flock (2) không khóa các tập tin qua NFS. Thay vào đó, hãy sử dụng fcntl (2): hoạt động trên NFS, được cung cấp một phiên bản Linux gần đây và một máy chủ hỗ trợ khóa.
Và, tất nhiên, tất cả những gì một trang đàn ông nói, dù lỗi thời đến đâu, là sự thật tối thượng.
flock()
chỉ hoạt động tốt trên Linux NFS, bao gồm từ PHP. Chúng tôi sử dụng nó rộng rãi và đã kiểm tra kỹ lưỡng để xác minh rằng nó hoạt động như mong muốn. Kiểm tra xem bạn có đang chạy tất cả các dịch vụ cần thiết trên cả máy khách và máy chủ không. Tìm "portmapper" và "rpc.statd". Nếu chúng không chạy, bạn cần tìm ra tập lệnh init nào khởi động chúng trên bản phân phối của bạn. Trên các bản phân phối dựa trên Debian, nó " /etc/init.d/portmap
" và " /etc/init.d/nfs-common
".
Từ máy khách, chạy " rpcinfo -u $NFSSERVER status
" và xem nếu bạn nhận được phản hồi. Khi cài đặt, tôi nhận được "chương trình 100024 phiên bản 1 đã sẵn sàng và đang chờ".
Ồ, cũng nên nhớ rằng trong một số trường hợp, NFS và statd có thể khó chịu nếu cả máy khách và máy chủ không có các mục nhập tên máy chủ đáng tin cậy cho nhau. Kiểm tra hai lần /etc/hosts
trên cả hai máy.
Chỉ muốn tự trả lời. Giải pháp có thể được tìm thấy ở đây: http://us3.php.net/manual/en/feft.flock.php#82521