Bài viết này sẽ xoay quanh về nội dung của các hàm xử lý và làm việc với file trong PHP. Đối với một ngôn ngữ lập trình, làm việc với file và thư mục là điều bắt buộc mà không thể tránh khỏi. Vấn đề xử lý file trong PHP rất quan trọng khi các bạn muốn làm một số chức năng như cache hay log file nhằm giúp ứng dụng web chạy nhanh hơn,…
Việc nắm vững kiến thức về xử lý file và quyền hạn của file, thư mục khi học PHP không những giúp bạn dễ dàng lưu trữ thông tin cho website mà còn giúp bạn tăng tính bảo mật cho các file và thư mục quan trọng.
Quá trình làm việc với một file trong PHP diễn ra như sau: Mở file –> Thao tác (Đọc, Ghi ) –> Đóng file.
Các loại File được hỗ trợ trong PHP
- File quản lý hệ thống
- File logs
- Loại file.txt
- File.log
- File.csv
- Dạng file hình ảnh file.gif, file.jpg …
- File cài đặt chương trình (program.ini)
Mở file với fopen
Để mở file trong PHP chúng ta dùng hàm fopen với cú pháp:
fopen($path, $mode);
Trong đó:
- $path là đường dẫn đến file các bạn muốn mở.
- $mode là thuộc tính bao gồm các quyền hạn truy cập vào file.
Danh sách ký hiệu thuộc tính $mode gồm quyền hạ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) |
x | Tạo file mới chỉ để ghi. |
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 chỉ để 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 cả viết lẫn đọ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 |
x+ | Quyền tạo file mới để đọc và ghi. |
b | Mở dưới dạng chế độ binary |
Hàm fopen() sẽ mở một file dựa vào đường dẫn truyền vào. Nếu truyền vào một URL, hàm sẽ sẽ tìm kiếm một trình xử lý giao thức(wrapper) cho URL đó, nếu không có trính xử lý nào đươc cung cấp, nó sẽ cảnh báo cho người dùng và sau đó tiếp tục như đối với các file bình thường.
Ví dụ:
<?php $open = @fopen('data.txt', 'r'); // dùng @ đặt trước hàm fopen để ngăn chặn thông báo lỗi khi truyền sai đường dẫn file if (!$open) echo "Mở file không thành công"; else echo "Mở file thành công"; ?>
Đọc File trong PHP
Có 3 cách đọc file thông thường trong PHP đó là đọc từng dòng, đọc từng ký tự và đọc hết file. Chúng ta sẽ đi vào từng cách đọc trên nhé!
Sử dụng hàm feof trong đọc file
Trước khi tìm hiểu các cách đọc file trong PHP mình xin giới thiệu các bạn hàm feof().
Hàm này có tác dụng đặt trong vòng lặp để sau khi đọc xong nó sẽ chuyển sang dòng mới hoặc ký tự mới đối với từng trường hợp đọc file.
Hàm feof() hữu ích khi lặp lại những dữ liệu không xác định được độ dài.
Đọc file từng dòng
Để đọc file từng dòng ta dùng hàm fgets($fp).
Ở cách này trước tiên chúng ta sẽ dùng feof để sau khi đọc xong nó sẽ chuyển sang dòng mới, và dùng hàm fgets để in ra từng dùng của file.
<?php $fp = @fopen('demo.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 { echo 'Mở file thành công <br>'; // Lặp qua từng dòng để đọc while(!feof($fp)) { echo fgets($fp); } } ?>
Ở phương pháp đọc file theo từng dòng này, ngoài cách duyệt từng dòng bằng việc dùng hàm feof trong vòng lặp while như trên thì ta còn có một cách khác đó là chuyển file sang dạng mảng với mỗi phần tử trong mảng là 1 dòng của file, sau đó chỉ cần duyệt mảng và xuất ra màn hình.
$array = @file('demo.txt'); // chuyển đổi file sang mảng foreach ($array as $value) { echo $value; }
Trong đó: Hàm file()
đọc nội dung của file và đưa vào một mảng. Mỗi phần tử của mảng tương ứng với một dòng của file.
Đọc file từng ký tự
Để đọc file từng dòng ta dùng hàm fgetc($fp).
Ở cách này trước tiên chúng ta sẽ dùng feof để sau khi đọc xong nó sẽ chuyển sang dòng mới, và dùng hàm fgetc để in ra từng dùng của file.
<?php $fp = @fopen('demo.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 { echo 'Mở file thành công <br>'; // Lặp qua từng ký tự để đọc while(!feof($fp)) { echo fgetc($fp); } } ?>
Đọc hết file với fread
Thông số trong hàm fread() chứa tên của file dùng để đọc dữ liệu và thông số thứ hai là một số lượng bytes nhất định để đọc dữ liệu.
Cú pháp: fread($file,$filesize)
<?php $fp = @fopen('demo.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 { echo 'Mở file thành công <br>'; echo fread($file, filesize('demo.txt')); } ?>
Ghi, Chèn dữ liệu vào file trong PHP
Để ghi nội dung vào file ta dùng hàm fwrite($fp, $content) trong đó $fp là đối tượng trả về lúc mở file, còn $content
Để 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.
Vì vậy mà việc ghi file sẽ phụ thuộc vào lúc bạn mở file như thế nào. Ví dụ lúc bạn mở file ghi đè thì lúc ghi file nó sẽ ghi đè, lúc bạn mở file ghi kiểu append thì lúc ghi file nó sẽ thêm xuống cuối file, nếu bạn mở file chỉ cho đọc thì bạn không thể ghi file được.
<?php $fp = @fopen('demo.txt', "w"); // 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 <br>'; fwrite($fp,'Đã mở file thành công, hãy tiếp tục thao tác mới'); } ?>
Đóng File
Quá trình làm việc với một file trong PHP diễn ra như sau: Mở file –> Thao tác (Đọc, Ghi ) –> Đóng file. Quy trình này là mặc định đối với nhiều ngôn ngữ lập trình khác nhau, chúng ta luôn phải tuân thủ theo quy trình đã mở thì phải đóng.
Việc mở file để sử dụng mà không đóng file rất nguy hiểm, vì thế sau khi sử dụng xong bạn nên đóng file để an toàn hơn và thu hồi tài nguyên hệ thống.
Để đóng file ta dùng hàm fclose($fp). Trong đó $fp là đối tượng trả về lúc bạn mở file.
<?php $fp = @fopen('demo.txt', "w"); // 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 <br>'; fwrite($fp,'Đã mở file thành công, hãy tiếp tục thao tác mới'); fclose($fs); //đóng file } ?>
Vì thế những ví dụ ở phần đọc file bạn đều phải bổ sung thêm hàm đóng file vào thì code mới đúng và hoàn chỉnh các bạn nhé!
Các hàm xử lí file khác
Kiểm tra file có tồn tại không?
Trong PHP có cung xấp cho chúng ta hàm file_exists($path)
để kiểm tra sự tồn tại của file, hàm sẽ trả về true
nếu file tồn tại và ngược lại false
nếu không. Trong đó $path là đường dẫn đến file cần test.
Bạn cũng có thể sử dụng hàm này khi bạn tạo ra một tập tin mới và bạn muốn đảm bảo rằng các tập tin chưa từng tồn tại trên server.
<?php if (file_exists('STDIO.txt')) { echo 'File exists'; } ?>
Kiểm tra cấp quyền với file
Để kiểm tra file có được cấp quyền gì không thì chúng ta dùng hàm is_writable()
. Hàm này sẽ trả về true nếu được quyền ghi và ngược lại false nếu không được quyền ghi.
<?php $fp = @fopen('demo.txt', "w"); // Kiểm tra file mở thành công không if (!$fp) { echo 'Mở file không thành công'; } else { if(is_writable('demo.txt')){ fwrite($fp, 'Được phép ghi');} else{ echo 'Không Được phép ghi';} fclose($fp); }
Lấy nội dung của file hàm file_get_contents
Cú pháp: file_get_contents($path)
Trong đó $path là đường dẫn đến file, hoặc 1 đường link URL dẫn tới trang web chứa file.
echo file_get_contents('demo.txt');
Đổi tên file
Để đổi tên file ta dùng hàm rename($oldname, $newname)
, trong đó $oldname
là đường dẫn đến file cần đổi tên, $newname
là đường dẫn mới có kèm tên file cần đổi . Nếu bạn chỉ muốn đổi tên thôi thì đường dẫn của cả 2 biến giống nhau, chỉ khác nhau ở cái tên file.
Nếu tên file mới bị trùng thì file đó sẽ bị ghi đè.
rename('demo.txt', 'newdemo.txt');
Copy file
Cú pháp: copy($source, $newpath)
Trong đó $source
là path file cần copy và $newpath
là path file cần di chuyển tới.
copy('demo.txt', 'newdemo.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.
<?php if (file_exists('demo.txt')) { if(unlink('demo.txt')) echo 'Xoá thành công'; else echo 'Không thành công'; } ?>
Ghi toàn bộ nội dung chuỗi ra file
Đây là cách ghi toàn bộ một chuỗi ra file ngắn gọn (thay cho việc phải sử dụng fopen, fread, fclose).
Cú pháp: file_put_contents($path, $contents)
file_put_contents('demo.txt', 'đây là nội dung sẽ được ghi ra file');
Tạo một thư mục ( folder) mới
Cú pháp: mkdir($path)
Trong đó $path là đường dẫn đến folder cần tạo.
Ví dụ:
mkdir('webdevelopment/php/phpcanban');
Kiểm tra sự tồn tại đường dẫn thư mục
Cú pháp kiểm tra sự tồn tại của thư mục trong php là is_dir(path)
if(is_dir('phpcanban')){ echo 'Folder này hiện đang tồn Tại'; }
Kết thúc
Qua bài viết trên mình đã nói qua về những hàm cần thiết về xử lý file cần biết trong PHP, Các bạn hãy thao khảo tìm mốt số bài tập thực hành để nâng cao hiểu biết của bản thân hơn nhé!
Ngoài ra còn rất nhiều hàm xử lý về file khác mà mình chưa nói tới, các bạn có thể tham khảo tại đây.
Bài viết tiếp theo mình sẽ sơ lược qua về vấn đề xử lý thời gian, ngày tháng trong PHP các bạn hãy đón đọc nhé!
Xem thêm:
- Bài 7: Vòng lặp Foreach trong PHP (Các loại vòng lặp phần 2)
- Bài 11: Các hàm xử lý mảng (Array) trong PHP
- Bài 12: Chuỗi (String) Và Các Hàm Xử Lý Chuỗi Trong PHP
- Bài 13: Phương thức GET và POST trong PHP
- Bài 14: Cookie là gì? Cookie trong PHP
- Bài 15: Session trong PHP
CHÚC CÁC BẠN THÀNH CÔNG VÀ VUI VẺ