I. Xử lý tập tin
Xử lý tập tin là một tác vụ quan trọng trong các ứng dụng web PHP. Nó giúp chương trình có thể đọc/ghi tập tin vì mục đích nào đó như cho phép người dùng quản lý tập tin, tải lên các tập tin, v.v…
Để đọc tập tin, PHP cung cấp một hàm rất đơn giản readfile(<đường dẫn đến file>), hàm này trả về chuỗi có giá trị là nội dung của file. Tuy nhiên hàm này chỉ đọc các file văn bản thuần (plain text).
Ví dụ chúng tôi có một tập tin diachi.txt có nội dung như sau:
A: w3schools.com B: php.net C: toiyeucoding.com
Tập tin diachi.txt được lưu cùng thư mục với file php. Đoạn code sau đây sẽ đọc và in nội dung file lên màn hình.
<?php echo readfile('diachi.txt'); ?>
Kết quả bao gồm nội dung tập tin và số byte đã được đọc.
Hình 64 Kết quả đọc tập tin
II. Mở và đọc tập tin
Trong phần này, chúng tôi sẽ giới thiệu với bạn các hàm sau dùng để đọc tập tin
- fopen : mở một tập tin
- fread: đọc một tập tin theo kích thước chỉ định
- fclose: đóng một tập tin đã mở
- fgets: đọc một dòng trong tập tin
- feof: kiểm tra kết thúc tập tin
- fgetc: đọc một kí tự
Các hàm trên chỉ dùng để đọc tập tin, ghi dữ liệu vào tập tin chúng tôi sẽ giới thiệu vào phần sau của bài này.
a. fopen mở một tập tin
fopen là một cách mở một tập tin tốt hơn readfile. Hàm này cung cấp nhiều lựa chọn hơn readfile. Chúng tôi sẽ sử dụng lại file diachi.txt để làm ví dụ cho phần này. Hàm fopen trả về một handle để xử lý tập tin. Hãy xem ví dụ dưới đây:
<?php $file = fopen("diachi.txt", "r") or die("Khong the mo tap tin!"); echo fread($file,filesize("diachi.txt")); fclose($file); ?>
Ví dụ sử dụng hàm fopen để mở tập tin diachi.txt, nếu không mở được tập tin sẽ xuất thông báo Không thể mở tập tin. Hàm fread dùng để đọc tập tin với kích thước chỉ định. Sau đó đóng tập tin đã đọc bằng hàm fclose. Kết quả của hàm fread là nội dung của tập tin và không bao gồm số byte đã đọc được như hàm readfile.
Hình 65 Kết quả mở file bằng fopen, đọc file bằng fread
Hàm fread và fclose sẽ được giải thích trong phần sau.
Hàm fopen gồm hai tham số, tham số đầu tiên là đường dẫn đến tập tin, tham số thứ hai là phương thức mở tập tin. Trong ví dụ trên là “r” có nghĩa chỉ đọc. Dưới đây là bảng tham khảo các phương thức mở tập tin:
r | Mở tập tin, chỉ đọc. Con trỏ trỏ đến đầu tập tin |
w | Mở tập tin, chỉ ghi. Xóa nội dung của tập tin hoặc tạo tập tin mới nếu tập tin mở không tồn tại. Con trỏ trỏ đến đầu tập tin |
a | Mở tập tin, chi ghi. Nội dung của tập tin được giữ nguyên. Con trỏ trỏ đến cuối tập tin. Tạo tập tin mới nếu tập tin mở không tồn tại |
x | Tạo tập tin mới chỉ để ghi. Trả về FALSE hoặc lỗi nếu tập tin đã tồn tại |
r+ | Mở tập tin, đọc/ghi. Con trỏ trỏ đến đầu tập tin |
w+ | Mở tập tin, đọc/ghi. Xóa nội dung của tập tin hoặc tạo tập tin mới nếu tập tin mở không tồn tại. Con trỏ trỏ đến đầu tập tin |
a+ | Mở tập tin, đọc/ghi. Nội dung của tập tin được giữ nguyên. Con trỏ trỏ đến cuối tập tin. Tạo tập tin mới nếu tập tin mở không tồn tại. |
x+ | Tạo tập tin mới, đọc/ghi. Trả về FALSE và lỗi nếu tập tin đã tồn tại. |
b. fread đọc một tập tin theo kích thước chỉ định
Hàm fread đọc nội dung từ một tập tin đã mở bằng hàm fopen. Hàm fread gồm hai tham số, tham số đầu tiên là handle được trả về bằng hàm fopen, tham số thứ hai là kích thước tối đa (tính bằng byte) được đọc.
fread($file,filesize("diachi.txt"));
Hàm filesize trả về kích thước của tập tin tính bằng byte.
c. fclose đóng một tập tin đã mở
Hàm fclose gồm một tham số là handle của tập tin đã mở bằng hàm fopen. Hàm này có chức năng đóng tập tin đã mở.
fclose($file);
Lưu ý: các tập tin đã mở phải được đóng bằng hàm fclose. Nếu không đóng tập tin, các ứng dụng khác có nhu cầu sử dụng tập tin đó sẽ không thể đọc được.
d. fgets đọc một dòng trong tập tin
Hàm fgets dùng để đọc một dòng mà con trỏ đang trỏ đến. Sau khi đọc xong dòng đó, con trỏ sẽ trỏ đến dòng tiếp theo. Kết quả trả về là chuỗi đã đọc được.
<?php $file = fopen("diachi.txt", "r") or die("Khong the doc file!"); echo fgets($file); fclose($file); ?>
e. feof kiểm tra kết thúc tập tin
Hàm feof (eof là viết tắt của từ end-of-file) dùng để kiểm tra con trỏ đã trỏ đến hết tập tin chưa. Kết quả trả về là TRUE nếu đã trỏ đến cuối tập tin (không còn đọc được nữa). Hàm này thường được dùng kết hợp với hàm fgets để đọc tập tin. Ví dụ như sau sẽ đọc từng dòng, sau đó xuống dòng bằng thẻ <br />:
<?php $file = fopen("diachi.txt", "r") or die("Khong the doc file!"); while(feof($file) == false) { echo fgets($file); echo '<br />'; } fclose($file); ?>
Hình 66 Đọc từng dòng
f. fgetc đọc một kí tự
Hàm fgetc dùng để đọc một kí tự trong tập tin đang mở. Sau khi đọc xong kí tự này thì con trỏ nhảy đến kí tự tiếp theo.
<?php $file = fopen("diachi.txt", "r") or die("Khong the doc file!"); echo fgetc($file); fclose($file); ?>