Hàm mkdir() trong PHP

Hàm mkdir() trong PHP
Hàm mkdir() trong PHP

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

Hàm mkdir() trong PHP dùng để tạo thư mục mới theo đường dẫn của thư mục mới, nếu tạo mới thư mục thành công sẽ trả về true, nếu thư mục đã tồn tại hoặc không tạo được sẽ trả về false.

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

$kết_quả = mkdir("đường_dẫn_của_thư_mục_mới");

đường_dẫn_của_thư_mục_mới: Đường dẫn của thư mục mới.

$kết_quả: Kết quả trả về true nếu tạo thư mục mới thành công, trả về false nếu thư mục mới không tạo được hoặc đã tồn tại.

Code Hàm mkdir() trong PHP

<?php
// Đường dẫn của thư mục mới
$thumuc = 'thumuctest/thumucmoi';

// Tạo một thư mục mới thông qua đường dẫn của thư mục mới
if (mkdir($thumuc)) {
  echo "Thư mục $thumuc đã được tạo thành công.";
} else {
  echo "Tạo lỗi hoặc thư mục $thumuc đã tồn tại";
}
// Kết quả: Thư mục thumuctest/thumucmoi đã được tạo thành công. 
?>

Kết quả:

Thư mục thumuctest/thumucmoi đã được tạo thành công.

Những lỗi thường gặp khi sử dụng hàm mkdir() trong PHP

Khi sử dụng mkdir(), việc tạo thư mục không chỉ phụ thuộc vào đường dẫn truyền vào hàm. Quyền ghi, cấu trúc thư mục và trạng thái thư mục đích đều có thể khiến thao tác thất bại. Xác định đúng nguyên nhân sẽ giúp xử lý lỗi nhanh hơn thay vì chỉ kiểm tra lại cú pháp.

Không tạo được thư mục do thiếu quyền ghi

PHP cần có quyền ghi tại vị trí chứa thư mục mới. Nếu tài khoản mà máy chủ web sử dụng không được phép ghi, mkdir() có thể trả về false dù đường dẫn hoàn toàn hợp lệ.

Trường hợp này thường xuất hiện khi làm việc với thư mục trên máy chủ Linux hoặc môi trường hosting có thiết lập quyền truy cập chặt chẽ. Cần kiểm tra quyền của thư mục cha và tài khoản đang chạy PHP trước khi thay đổi quyền một cách tùy tiện.

Nên kiểm tra kết quả trả về của hàm để phát hiện lỗi ngay tại thời điểm tạo thư mục:

<?php
$path = __DIR__ . '/uploads';

if (!mkdir($path, 0755)) {
echo 'Không thể tạo thư mục.';
}
?>

Đường dẫn thư mục cha không tồn tại

Nếu đường dẫn cần tạo nằm bên trong một thư mục cha chưa tồn tại, mkdir() sẽ không tự động tạo toàn bộ cấu trúc nếu không được yêu cầu tạo thư mục theo nhiều cấp.

Ví dụ, muốn tạo uploads/images/2026 nhưng thư mục uploads chưa có, việc chỉ truyền đường dẫn cuối cùng có thể khiến thao tác thất bại. Khi đó, tham số recursive cần được đặt thành true để PHP tạo lần lượt các thư mục còn thiếu.

<?php
$path = __DIR__ . '/uploads/images/2026';

if (!mkdir($path, 0755, true)) {
echo 'Không thể tạo cấu trúc thư mục.';
}
?>

Thư mục đã tồn tại nhưng vẫn cố tạo lại

Gọi mkdir() với một đường dẫn đã tồn tại có thể phát sinh cảnh báo và khiến kết quả không như mong muốn. Vì vậy, trước khi tạo thư mục, nên xác định thư mục đó đã tồn tại hay chưa.

Cách xử lý phổ biến là kết hợp is_dir() với mkdir(). Cách này phù hợp khi ứng dụng có thể chạy nhiều lần và cần đảm bảo thư mục đích luôn sẵn sàng.

<?php
$path = __DIR__ . '/uploads';

if (!is_dir($path)) {
mkdir($path, 0755, true);
}
?>

Tạo thư mục nhiều cấp với mkdir() không thành công

Khi cần tạo nhiều thư mục lồng nhau trong một lần gọi, tham số thứ ba của mkdir() là yếu tố quan trọng. Nếu đặt giá trị này là false hoặc bỏ qua, PHP chỉ xử lý thư mục trực tiếp được chỉ định và không tự xây dựng các cấp thư mục còn thiếu.

Chẳng hạn, với đường dẫn storage/cache/images, nếu storage hoặc cache chưa tồn tại thì nên bật chế độ đệ quy:

<?php
$path = __DIR__ . '/storage/cache/images';

if (!is_dir($path) && !mkdir($path, 0755, true)) {
echo 'Tạo thư mục thất bại.';
}
?>

Cách kiểm tra này vừa tránh tạo lại thư mục đã có, vừa cho phép PHP tạo toàn bộ cấu trúc còn thiếu. Nếu vẫn thất bại, cần kiểm tra tiếp quyền ghi và đường dẫn thực tế mà ứng dụng đang sử dụng.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm mkdir() 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 mkdir() 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) !