Việc xử lý file trong php rất quan trọng vì trong các ứng dụng thực tế ta hay dùng file để lưu trữ cache cho website hoặc export dữ liệu một bảng nào đó, vì thế tôi viết bài này giúp các bạn làm quen với một số hàm liên quan đến file như đọc file, ghi file, tạo folder mới, xóa folder, xóa file. Chúng ta sẽ học về upload file trong bài viết tiếp theo.
1. Mở file
Để mở file trong PHP chúng ta dùng hàm fopen
1 |
open($path, $mode) |
Trong đó:
- $path là đường dẫn đến file cần mở
- $mode là quyền truy cập vào file
Danh sách các quyền truy cập vào file
Mode | Chú thích |
---|---|
r | Chỉ được đọc (Read only) |
r+ | Được quyền đọc và ghi (Read + write) |
w | Chỉ được viết (write only) |
w+ | Được quyền đọc và viết (write + read). Nếu file này tồn tại thì nội dung cũ sẽ bị xóa đi và ghi lại nội dung mới, còn nếu file chưa tồn tại thì nó tạo file mới |
a | Được quyền viết và nếu file tồn tại nó sẽ ghi tiếp nội dung phía dưới, ngược lại nếu file không tồn tại nó tạo file mới |
a+ | Được quyền viết và đọc. Nếu file tồn tại nó sẽ ghi tiếp nội dung phía dưới, ngược lại nếu file không tồn tại nó tạo file mới |
b | Mở dưới dạng chế độ binary |
Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// Sử dụng dấu @ đằng trước hàm fopen để chặn // thông báo lỗi khi sai đường dẫn // Đường dẫn $path có thể là đường dẫn tương đối // hoặc tuyệt đối đều được $path = 'example.txt'; $fp = @fopen($path, "r"); // Kiểm tra file mở thành công không if (!$fp) { echo 'Mở file không thành công'; } else{ echo 'Mở file thành công'; } |
2. Đọc file
Trong PHP có 3 cách đọc file đó là đọc từng dòng, đọc từng ký tự và đọc hết file.
Ta dùng hàm fgetc($fp)
để đọc theo từng ký tự, dùngfgets($fp)
để đọc theo từng dòng. Đối với đọc từng dòng và đọc từng ký tự ta phải dùng hàm feof($fp)
đặt trong vòng lặp while để sau khi đọc xong nó sẽ chuyển sang dòng mới hoặc ký tự mới.
Để đọc hết tất cả file ta dùng hàm fread($fp, $size)
, trong đó $fp
là đối tượng lúc mở file, còn $size
là kích cỡ của file cần đọc. Để lấy kích cỡ của file cần đọc ta dùng hàm filesize($path)
.
Ví dụ: Đọc file từng ký tự
1 2 3 4 5 6 7 8 9 10 11 12 |
$fp = @fopen('example.txt', "r"); // Kiểm tra file mở thành công không if (!$fp) { echo 'Mở file không thành công'; } else { // Lặp qua từng ký tự để đọc while(!feof($fp)) { echo fgetc($fp); } } |
Ví dụ: Đọc file từng dòng
1 2 3 4 5 6 7 8 9 10 11 12 |
$fp = @fopen('example.txt', "r"); // Kiểm tra file mở thành công không if (!$fp) { echo 'Mở file không thành công'; } else { // Lặp qua từng dòng để đọc while(!feof($fp)) { echo fgets($fp); } } |
Ví dụ: Đọc hết file
1 2 3 4 5 6 7 8 9 10 |
$fp = @fopen('example.txt', "r"); // Kiểm tra file mở thành công không if (!$fp) { echo 'Mở file không thành công'; } else { // Đọc file và trả về nội dung $data = fread($fp, filesize('demo.txt')); echo $data; } |
3. Ghi file
Để ghi file thì bắt buộc file của bạn phải được mở ở chế độ mode có cho phép ghi file và tiếp đó dùng hàm fwrite
để ghi dữ liệu.
1 2 3 4 5 6 7 |
$fp = @fopen('example.txt', 'w'); if (!$fp) { echo "Mở file không thành công"; } else { $data = 'Đây là dữ liệu được ghi vào file.'; fwrite($file, $data); } |
4. Đóng File
Trong PHP các bạn sử dụng hàm fclose để đóng file.
1 2 3 4 5 6 7 8 |
$file = @fopen('example.txt', 'w'); if (!$file) { echo "Mở file không thành công"; } else { $data = 'Đây là dữ liệu được ghi vào file.'; fwrite($file, $data); fclose($file); } |
5. Các hàm xử lý file khác
Sau đây là một số hàm xử lý file khác.
Kiểm tra file có tồn tại không
Ta sử dụng hàm file_exists($path) để kiểm tra file có tồn tại hay không. Trong đó $path là đường dẫn đến file cần kiểm tra.
1 2 3 4 |
if (file_exists('demo.txt')) { echo 'File tồn tại'; } |
Kiểm tra quyền ghi file
Dùng hàm is_writable() để kiểm tra quyền ghi file. Hàm này sẽ trả về true nếu được quyền ghi và ngược lại sẽ trả về false nếu không được quyền ghi.
1 2 3 4 5 |
if(is_writable('example.txt')) { echo 'Được quyền ghi'; } else { echo 'không được phép ghi'; } |
Lấy nội dung của file
Để lấy nội dung của một file chúng ta cũng có thể dùng hàm file_get_contents()
. Hàm này có thể lấy nội dung của một file hoặc một trang web bằng cách trả về html của trang web đó.
1 2 |
echo file_get_contents('data.txt'); echo file_get_contents('https://vi-magento.com'); |
Kiểm tra thư mục đã tồn tại hay chưa
Ta dùng hàm is_dir($folder) để kiểm tra folder đã tồn tại hay chưa
1 2 3 |
if(is_dir('folder')){ echo 'Folder Tồn Tại'; } |
Tạo thư mục mới
Để tạo thư mục mới ta dùng hàm mkdir($path). Trong đó $path là đường dẫn đến folder cần tạo. Folder cuối cùng chính là folder cần tạo và bạn phải chắc chắn rằng các folder phía trước đó đã có rồi, nếu không sẽ báo lỗi.
1 2 3 4 |
// Kiểm tra folder parent chưa có chưa, nếu có thì tạo folder con if(is_dir('parent/sub')){ mkdir('parent/sub'); } |
Đổi tên file
Ta sử dụng hàm rename($old, $new) trong đó $old là đường dẫn đến file cần đổi tên, $new là đường dẫn kèm theo tên file mới.
1 |
rename('old.txt', 'new.txt'); |
Copy file
Để copy sang file mới ta dùng hàm copy($source, $des)
, trong đó $source
là đường dẫn đến file cần copy và $des
là đường dẫn cần di chuyển tới. Nếu bạn muốn đổi luôn tên thì đường dẫn $des
bạn khai báo một cái tên khác.
1 |
copy('source.txt', 'des.txt'); |
Xóa file
Ta dùng hàm unlink($path) để xóa file, trong đó $path là đường dẫn đến file cần xóa.
1 |
unlink('example.txt'); |
6. Lời kết
Bài viết này chỉ liệt kê những hàm thông dụng để xử lý file. Upload file chúng ta sẽ tìm hiểu ở bài viết sau.