Tổng Hợp Các Hàm Xử Lý File Trong PHP

Tổng Hợp Các Hàm Xử Lý File Trong PHP

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.

Tổng Hợp Các Hàm Xử Lý File Trong PHP

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:

  1. Kiểm tra file hoặc thư mục có tồn tại.
  2. Mở file.
  3. Đọc hoặc ghi dữ liệu.
  4. Di chuyển con trỏ nếu cần.
  5. Đó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()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
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ệ
Chia sẻ nội dung đánh giá của bạn về Tổng Hợp Các Hàm Xử Lý File 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
Đăng ký tư vấn thiết kế website
Tìm hiểu 1 năm không bằng lắng nghe 1 câu tư vấn