Hàm is_writable() trong PHP

Hàm is_writable() trong PHP
Hàm is_writable() trong PHP

Chức năng của Hàm is_writable() trong PHP

Hàm is_writable() trong PHP dùng để kiểm tra file hoặc thư mục có tồn tại hay không và nó có cho phép ghi hay không.

Cú pháp của Hàm is_writable() trong PHP

$kết_quả = is_writable("đường_dẫn_đến_file_hoặc_thư_mục");

đường_dẫn_đến_file_hoặc_thư_mục: Đường dẫn đến file hoặc thư mục.

$kết_quả: Kết quả trả về true nếu file hoặc thư mục có tồn tại và cho phép ghi, trả về false nếu file hoặc thư mục không có tồn tại hoặc không cho phép ghi.

Code Hàm is_writable() trong PHP

<?php
// Đường dẫn đến file
$filenguon = "thumuctest/test.txt";
// Kiểm tra file có tồn tại và ghi được không
if(is_writable($filenguon)){
 echo "File tồn tại và ghi được";	
}else{
 echo "File không ghi được";	
}
// Kết quả: File tồn tại và ghi được

// Đường dẫn đến thư mục
$thumuc = "thumuctest";
// Kiểm tra thư mục có tồn tại và ghi được không
if(is_writable($thumuc)){
 echo "Thư mục tồn tại và ghi được";	
}else{
 echo "Thư mục không ghi được";	
}
// Kết quả: Thư mục tồn tại và ghi được
?>

Kết quả:

File tồn tại và ghi được
Thư mục tồn tại và ghi được

Kiểm tra quyền ghi file và thư mục với is_writable() trong PHP

Khi làm việc với file hoặc thư mục, việc kiểm tra đường dẫn có cho phép ghi hay không giúp PHP tránh thực hiện thao tác trong điều kiện không phù hợp. Hàm is_writable() có thể dùng để xác định một đường dẫn hiện tại có khả năng ghi hay không trước khi tạo, sửa hoặc cập nhật dữ liệu.

is_writable() kiểm tra được những đường dẫn nào?

is_writable() có thể kiểm tra cả file và thư mục thông qua đường dẫn được truyền vào. Với file, hàm xác định file đó có quyền ghi hay không. Với thư mục, kết quả cho biết tiến trình PHP có quyền ghi vào thư mục đó hay không.

Ví dụ, trước khi ghi nội dung vào một file, có thể kiểm tra quyền ghi như sau:

<?php
$file = "data.txt";

if (is_writable($file)) {
    file_put_contents($file, "Nội dung mới");
}
?>

Đối với thư mục, kiểm tra quyền ghi đặc biệt hữu ích khi ứng dụng cần tạo file mới hoặc lưu dữ liệu tải lên:

<?php
$directory = "uploads";

if (is_writable($directory)) {
    echo "Thư mục có thể ghi";
}
?>

Điểm cần lưu ý là is_writable() kiểm tra khả năng ghi dựa trên quyền mà tiến trình PHP hiện tại có được. Vì vậy, kết quả có thể khác nhau giữa môi trường phát triển trên máy tính cá nhân và máy chủ thực tế.

Cách xử lý khi is_writable() trả về false

Khi is_writable() trả về false, không nên cố ghi dữ liệu ngay lập tức. Trước tiên cần kiểm tra đường dẫn có tồn tại hay không, PHP đang chạy bằng tài khoản nào và tài khoản đó có quyền ghi vào file hoặc thư mục tương ứng hay không.

Một nguyên nhân phổ biến là đường dẫn trỏ đến file không tồn tại hoặc thư mục chưa được tạo. Trong trường hợp cần tạo file mới, hãy kiểm tra quyền ghi của thư mục chứa file thay vì chỉ kiểm tra file chưa tồn tại.

<?php
$directory = "uploads";
$file = $directory . "/data.txt";

if (is_dir($directory) && is_writable($directory)) {
    file_put_contents($file, "Dữ liệu cần lưu");
} else {
    echo "Không thể ghi vào thư mục";
}
?>

Nếu đường dẫn tồn tại nhưng vẫn nhận kết quả false, cần xem lại quyền truy cập của hệ điều hành hoặc cấu hình máy chủ. Không nên tùy tiện cấp quyền ghi rộng cho toàn bộ thư mục chỉ để làm cho hàm trả về true, bởi điều này có thể tạo ra rủi ro bảo mật.

Phân biệt quyền ghi của file và thư mục

File và thư mục có cách sử dụng quyền ghi khác nhau. Khi cần sửa nội dung của một file đã tồn tại, nên kiểm tra trực tiếp file đó. Ngược lại, khi ứng dụng cần tạo file mới, quyền ghi của thư mục chứa file mới là yếu tố quan trọng.

Chẳng hạn, một file có thể tồn tại nhưng không cho phép PHP chỉnh sửa, trong khi thư mục chứa file vẫn cho phép tạo các file khác. Vì vậy, không nên xem kết quả kiểm tra của một đường dẫn là đại diện cho toàn bộ khu vực lưu trữ.

Trong ứng dụng xử lý upload, cách kiểm tra phù hợp thường là xác định thư mục đích có tồn tại và có thể ghi trước khi lưu file:

<?php
$uploadDir = "uploads";

if (!is_dir($uploadDir)) {
    echo "Thư mục không tồn tại";
} elseif (!is_writable($uploadDir)) {
    echo "Thư mục không có quyền ghi";
} else {
    echo "Có thể lưu file vào thư mục";
}
?>

Cách phân biệt này giúp xác định chính xác vị trí gây ra lỗi và tránh xử lý sai đối tượng. Đặc biệt với ứng dụng chạy trên máy chủ, việc kiểm tra đúng quyền của file và thư mục sẽ giúp quá trình ghi dữ liệu ổn định hơn.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm is_writable() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm is_writable() trong PHP
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !