PHP flock()

Hàm flock() trong PHP

Hàm flock() trong PHP được sử dụng để thực hiện thao tác khóa file. Điều này rất hữu ích khi bạn muốn đảm bảo rằng không có quá trình nào khác có thể đọc hoặc ghi vào file trong khi một quá trình đang thực hiện thao tác trên file đó. Điều này giúp tránh tình trạng xung đột dữ liệu và đảm bảo tính toàn vẹn cho file.

Cú pháp

bool flock(resource $handle, int $operation, int &$wouldblock = null)

Tham số

  • $handle: Duyệt tới file resource được mở bằng fopen().
  • $operation: Loại khóa mà bạn muốn thực hiện. Có thể là một trong các giá trị sau:
    • LOCK_SH: Khóa chia sẻ.
    • LOCK_EX: Khóa độc quyền.
    • LOCK_UN: Giải phóng khóa.
  • $wouldblock: Tham số này là tùy chọn. Nếu được cung cấp, nó sẽ nhận giá trị 1 nếu thao tác khóa được mắc kẹt và không thể thực hiện ngay lập tức.

Giá trị trả về

Hàm flock() trả về true nếu khóa thành công, và false nếu không thành công.

Ví dụ minh họa


$filename = "example.txt";
$file = fopen($filename, "c+"); // Mở file để đọc & ghi

if (flock($file, LOCK_EX)) { // Thực hiện khóa độc quyền
    // Thực hiện các thao tác trên file
    ftruncate($file, 0); // Xóa nội dung file
    fwrite($file, "Nội dung mới!");
    fflush($file); // Đẩy dữ liệu đến file

    flock($file, LOCK_UN); // Giải phóng khóa
} else {
    echo "Không thể khóa file!";
}

fclose($file); // Đóng file

Lưu ý

  • Hãy đảm bảo gọi flock() trước khi thực hiện bất kỳ thao tác nào trên file để tránh xung đột.
  • Khóa sẽ tự động bị giải phóng khi file được đóng hoặc script kết thúc.
  • Thao tác khóa có thể mất thời gian nếu có nhiều tiến trình cố gắng truy cập cùng một file đồng thời, vì vậy cần cẩn trọng trong các ứng dụng lớn.

Tổng kết, flock() là một phương pháp hiệu quả để quản lý tệp trong PHP, đặc biệt trong các ứng dụng cần tính đồng bộ cao khi làm việc với file.