Tổng Hợp Các Hàm Xử Lý File Trong PHP
Trần Thị Vân
- 109
- 24/07/2026
Khám phá đầy đủ các hàm xử lý file trong PHP từ đọc, ghi, tạo, xóa, sao chép, đổi tên đến quản lý thư mục và file CSV. Kèm ví dụ thực tế, dễ hiểu, giúp bạn áp dụng hiệu quả trong lập trình PHP, chi tiết như nào hãy cùng chúng tôi phân tích:
File là một trong những thành phần quan trọng trong hầu hết ứng dụng PHP. Từ việc lưu log hệ thống, đọc file cấu hình, tạo file báo cáo, xử lý dữ liệu CSV, ghi cache cho đến upload tài liệu, tất cả đều cần đến các hàm làm việc với file. Nếu nắm vững nhóm hàm này, bạn sẽ xây dựng được những ứng dụng linh hoạt, tối ưu và dễ bảo trì hơn.
Bài viết dưới đây tổng hợp đầy đủ các hàm xử lý file thông dụng trong PHP, giải thích cách hoạt động, thời điểm nên sử dụng và ví dụ thực tế giúp bạn dễ áp dụng vào dự án.

File trong PHP hoạt động như thế nào?
Trước khi tìm hiểu từng hàm, bạn nên hiểu quy trình xử lý file trong PHP thường gồm các bước:
- Kiểm tra file hoặc thư mục có tồn tại.
- Mở file.
- Đọc hoặc ghi dữ liệu.
- Di chuyển con trỏ nếu cần.
- Đóng file.
Ngoài ra còn có nhiều thao tác khác như sao chép, đổi tên, xóa file, lấy thông tin kích thước, thời gian chỉnh sửa hoặc phân quyền.
Nhóm hàm mở và đóng file
fopen()
Đây là hàm được sử dụng nhiều nhất khi làm việc với file. Hàm mở một file theo chế độ chỉ định và trả về tài nguyên (resource) để các hàm khác tiếp tục xử lý.
| Chế độ | Ý nghĩa |
|---|---|
| r | Chỉ đọc |
| r+ | Đọc và ghi |
| w | Ghi mới, nếu file tồn tại sẽ bị xóa nội dung |
| w+ | Đọc và ghi, đồng thời ghi đè file |
| a | Ghi nối tiếp vào cuối file |
| a+ | Đọc và ghi nối tiếp |
| x | Tạo file mới, nếu đã tồn tại sẽ báo lỗi |
| x+ | Đọc và ghi trên file mới tạo |
<?php
$file = fopen("demo.txt", "r");
?>
fclose()
Sau khi xử lý xong, nên đóng file để giải phóng tài nguyên.
<?php
$file = fopen("demo.txt", "r");
fclose($file);
?>
Nhóm hàm đọc nội dung file
fread()
Đọc số lượng byte xác định từ file.
<?php
$file = fopen("demo.txt", "r");
echo fread($file, filesize("demo.txt"));
fclose($file);
?>
Hàm này phù hợp khi cần đọc toàn bộ file hoặc một phần dữ liệu có kích thước xác định.
fgets()
Đọc từng dòng trong file.
<?php
$file = fopen("demo.txt", "r");
while(!feof($file)){
echo fgets($file);
}
fclose($file);
?>
Đây là lựa chọn phù hợp khi xử lý file văn bản lớn.
fgetc()
Đọc từng ký tự.
<?php
$file = fopen("demo.txt", "r");
while(!feof($file)){
echo fgetc($file);
}
fclose($file);
?>
Thường dùng khi cần phân tích từng ký tự hoặc xây dựng bộ phân tích cú pháp.
file()
Đọc toàn bộ file và trả về dưới dạng mảng, mỗi phần tử tương ứng một dòng.
<?php
$data = file("demo.txt");
print_r($data);
?>
file_get_contents()
Một trong những hàm được sử dụng nhiều nhất vì cú pháp ngắn gọn.
<?php
$content = file_get_contents("demo.txt");
echo $content;
?>
Ngoài file cục bộ, hàm này còn có thể đọc nội dung từ URL nếu máy chủ cho phép.
Nhóm hàm ghi dữ liệu
fwrite()
Ghi nội dung vào file đã được mở.
<?php
$file = fopen("demo.txt","a");
fwrite($file,"Xin chao Web Moi");
fclose($file);
?>
file_put_contents()
Hàm này giúp ghi dữ liệu chỉ với một dòng lệnh.
<?php
file_put_contents("demo.txt","Noi dung moi");
?>
Nếu muốn nối thêm dữ liệu thay vì ghi đè:
<?php
file_put_contents(
"demo.txt",
"Dong moi",
FILE_APPEND
);
?>
Di chuyển và kiểm tra vị trí con trỏ
feof()
Kiểm tra đã đến cuối file hay chưa.
<?php
while(!feof($file)){
echo fgets($file);
}
?>
fseek()
Di chuyển con trỏ đến vị trí mong muốn.
<?php
$file = fopen("demo.txt","r");
fseek($file,10);
echo fgets($file);
fclose($file);
?>
ftell()
Trả về vị trí hiện tại của con trỏ.
<?php
$file = fopen("demo.txt","r");
echo ftell($file);
fclose($file);
?>
rewind()
Đưa con trỏ trở về đầu file.
<?php
$file = fopen("demo.txt","r");
rewind($file);
?>
Kiểm tra sự tồn tại và thông tin file
file_exists()
Kiểm tra file hoặc thư mục có tồn tại.
<?php
if(file_exists("demo.txt")){
echo "Ton tai";
}
?>
is_file()
Kiểm tra đường dẫn có phải file hay không.
<?php
if(is_file("demo.txt")){
echo "La file";
}
?>
is_dir()
Kiểm tra thư mục.
<?php
if(is_dir("uploads")){
echo "La thu muc";
}
?>
is_readable()
Kiểm tra quyền đọc.
<?php
if(is_readable("demo.txt")){
echo "Co quyen doc";
}
?>
is_writable()
Kiểm tra quyền ghi.
<?php
if(is_writable("demo.txt")){
echo "Co quyen ghi";
}
?>
filesize()
Lấy kích thước file theo byte.
<?php
echo filesize("demo.txt");
?>
filemtime()
Lấy thời điểm chỉnh sửa gần nhất.
<?php
echo date("d/m/Y H:i:s", filemtime("demo.txt"));
?>
filectime()
Lấy thời gian tạo hoặc thay đổi inode (tùy hệ điều hành).
fileatime()
Lấy thời gian truy cập gần nhất.
Sao chép, đổi tên và xóa file
copy()
Sao chép file sang vị trí khác.
<?php
copy("demo.txt","backup.txt");
?>
rename()
Đổi tên hoặc di chuyển file.
<?php
rename("demo.txt","new-demo.txt");
?>
unlink()
Xóa file.
<?php
unlink("demo.txt");
?>
Tạo và quản lý thư mục
mkdir()
Tạo thư mục mới.
<?php
mkdir("uploads");
?>
rmdir()
Xóa thư mục rỗng.
<?php
rmdir("uploads");
?>
scandir()
Đọc danh sách file và thư mục.
<?php
$list = scandir("uploads");
print_r($list);
?>
Lấy thông tin chi tiết của file
Bên cạnh việc đọc và ghi dữ liệu, PHP còn cung cấp nhiều hàm giúp lấy thông tin của một file để phục vụ việc quản lý, hiển thị hoặc kiểm tra trước khi xử lý.
pathinfo()
Hàm pathinfo() phân tích đường dẫn của file và trả về các thành phần như tên file, thư mục chứa, phần mở rộng và tên không có đuôi mở rộng.
<?php
$info = pathinfo("uploads/image.jpg");
print_r($info);
?>
Kết quả trả về thường bao gồm:
- dirname
- basename
- extension
- filename
Đây là hàm rất hữu ích khi cần kiểm tra định dạng file upload hoặc đổi tên file.
basename()
Lấy tên file từ một đường dẫn đầy đủ.
<?php
echo basename("uploads/image.jpg");
?>
Kết quả:
image.jpg
dirname()
Trả về đường dẫn của thư mục chứa file.
<?php
echo dirname("uploads/image.jpg");
?>
Kết quả:
uploads
realpath()
Chuyển đường dẫn tương đối thành đường dẫn tuyệt đối trên máy chủ.
<?php
echo realpath("uploads/image.jpg");
?>
Hàm này thường được sử dụng khi cần xử lý file trong nhiều thư mục khác nhau hoặc tránh lỗi đường dẫn.
Thay đổi quyền truy cập file
chmod()
Cho phép thay đổi quyền truy cập của file hoặc thư mục.
<?php
chmod("demo.txt", 0644);
?>
Một số quyền thường gặp:
| Giá trị | Ý nghĩa |
|---|---|
| 0755 | Thư mục có thể đọc và thực thi công khai |
| 0777 | Mọi người đều có toàn quyền |
| 0644 | File chỉ chủ sở hữu được ghi |
| 0600 | Chỉ chủ sở hữu được đọc và ghi |
Trong thực tế, không nên sử dụng quyền 0777 nếu không thực sự cần thiết vì có thể tạo ra lỗ hổng bảo mật.
touch()
Tạo file mới nếu file chưa tồn tại hoặc cập nhật thời gian chỉnh sửa của file.
<?php
touch("demo.txt");
?>
Đây là cách nhanh nhất để tạo một file rỗng.
Làm việc với file CSV
CSV là định dạng được sử dụng phổ biến khi trao đổi dữ liệu giữa nhiều hệ thống. PHP hỗ trợ rất tốt việc đọc và ghi loại file này.
fgetcsv()
Đọc từng dòng dữ liệu CSV và chuyển thành mảng.
<?php
$file = fopen("users.csv", "r");
while(($row = fgetcsv($file)) !== false){
print_r($row);
}
fclose($file);
?>
Mỗi dòng trong file sẽ trở thành một mảng chứa các cột dữ liệu.
fputcsv()
Ghi dữ liệu dạng mảng vào file CSV.
<?php
$file = fopen("users.csv", "w");
fputcsv($file, array(
"ID",
"Ho ten",
"Email"
));
fclose($file);
?>
Hàm này giúp tự động thêm dấu phân cách đúng chuẩn CSV thay vì phải nối chuỗi thủ công.
Khóa file khi nhiều người cùng truy cập
flock()
Khi nhiều tiến trình cùng ghi vào một file, dữ liệu có thể bị ghi chồng hoặc mất nội dung. Hàm flock() giúp khóa file trong quá trình xử lý.
<?php
$file = fopen("log.txt", "a");
if(flock($file, LOCK_EX)){
fwrite($file, "Du lieu moi");
flock($file, LOCK_UN);
}
fclose($file);
?>
Đây là kỹ thuật nên áp dụng đối với file log, cache hoặc các file được nhiều người dùng truy cập cùng lúc.
Đọc file theo từng dòng lớn
Đối với các file vài trăm MB hoặc vài GB, không nên sử dụng file_get_contents() vì toàn bộ nội dung sẽ được đưa vào bộ nhớ.
Thay vào đó nên kết hợp fopen(), fgets() và feof().
<?php
$file = fopen("big-log.txt", "r");
while(!feof($file)){
$line = fgets($file);
// Xu ly tung dong
}
fclose($file);
?>
Cách làm này tiêu tốn rất ít RAM và phù hợp với các hệ thống xử lý dữ liệu lớn.
Một số tình huống sử dụng phổ biến
Đọc file cấu hình
Nhiều dự án lưu cấu hình trong file JSON hoặc TXT rồi sử dụng file_get_contents() để đọc trước khi xử lý.
Ghi file nhật ký
Mỗi khi hệ thống phát sinh lỗi hoặc có người đăng nhập, ứng dụng sẽ dùng file_put_contents() hoặc fwrite() kết hợp với FILE_APPEND để ghi thêm dữ liệu.
Tạo báo cáo
Khi xuất báo cáo dạng CSV hoặc TXT, PHP thường sử dụng fputcsv() hoặc fwrite() để sinh file.
Kiểm tra file upload
Trước khi lưu file lên máy chủ, lập trình viên thường kết hợp:
- file_exists()
- pathinfo()
- filesize()
- is_readable()
- is_writable()
Việc kiểm tra đầy đủ sẽ giúp hạn chế lỗi và tăng tính an toàn cho hệ thống.
Những lưu ý khi xử lý file trong PHP
- Luôn kiểm tra file có tồn tại trước khi mở.
- Đóng file ngay sau khi hoàn thành xử lý bằng fclose().
- Không sử dụng quyền 0777 nếu không cần thiết.
- Không tin tưởng tên file do người dùng tải lên.
- Nên đổi tên file upload để tránh trùng lặp.
- Với file lớn, nên đọc theo từng dòng thay vì đọc toàn bộ.
- Nên khóa file khi có khả năng nhiều tiến trình cùng ghi dữ liệu.
- Kiểm tra quyền đọc và quyền ghi trước khi thao tác.
- Không lưu file quan trọng trong thư mục có thể truy cập trực tiếp từ Internet nếu không có cơ chế bảo vệ.
Bảng tổng hợp các hàm xử lý file thường dùng
| Hàm | Mục đích |
|---|---|
| fopen() | Mở file |
| fclose() | Đóng file |
| fread() | Đọc theo số byte |
| fgets() | Đọc từng dòng |
| fgetc() | Đọc từng ký tự |
| file() | Đọc toàn bộ thành mảng |
| file_get_contents() | Đọc toàn bộ nội dung |
| fwrite() | Ghi dữ liệu |
| file_put_contents() | Ghi nhanh vào file |
| copy() | Sao chép file |
| rename() | Đổi tên hoặc di chuyển |
| unlink() | Xóa file |
| mkdir() | Tạo thư mục |
| rmdir() | Xóa thư mục rỗng |
| scandir() | Liệt kê nội dung thư mục |
| pathinfo() | Phân tích đường dẫn |
| filesize() | Lấy kích thước file |
| filemtime() | Thời gian chỉnh sửa |
| chmod() | Thay đổi quyền |
| touch() | Tạo file hoặc cập nhật thời gian |
| fgetcsv() | Đọc CSV |
| fputcsv() | Ghi CSV |
| flock() | Khóa file khi truy cập đồng thời |
Kết luận
Các hàm xử lý file trong PHP là nền tảng quan trọng đối với hầu hết ứng dụng web, từ những website đơn giản đến các hệ thống quản trị dữ liệu lớn. Việc hiểu rõ từng hàm, biết khi nào nên sử dụng và kết hợp đúng cách sẽ giúp chương trình hoạt động ổn định, tiết kiệm tài nguyên và đảm bảo an toàn dữ liệu.
Thay vì chỉ ghi nhớ cú pháp, bạn nên thực hành với các tình huống thực tế như đọc file cấu hình, tạo file log, xử lý CSV, quản lý thư mục và upload tài liệu. Sau khi thành thạo nhóm hàm này, bạn sẽ dễ dàng tiếp cận các chủ đề nâng cao hơn như xử lý file nén, lưu trữ đám mây hoặc quản lý dữ liệu quy mô lớn trong PHP.
- 0 Bình luận
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 *