Đăng nhập
Bạn chưa có tài khoản? Đăng ký.
Bạn đã quên password?
Xử lý file là một nhiệm vụ rất quan trọng trong bất kỳ ứng dụng web được viết bằng ngôn ngữ PHP nào. Chúng ta thường xuyên phải thao tác và xử lý một hoặc nhiều file PHP cho những nhiệm vụ và mục đích khác nhau.
PHP có một số chức năng để tạo, đọc, tải lên và chỉnh sửa file.
Hãy cẩn thận khi thao tác với các tập tin bằng php
Khi bạn đang thao tác với các tập tin bằng PHP, bạn phải rất cẩn thận, vì bạn có thể gây ra rất nhiều thiệt hại nếu bạn xử lý lỗi. Các lỗi thường gặp là: chỉnh sửa sai tập tin, tạo ra các tập tin rác ảnh hưởng tới quá trình lưu trữ dữ liệu (như full ổ cứng server), xóa nhầm các tập tin quan trọng ảnh hưởng tới hệ thống, ...
Hàm readfile()
có chức năng đọc một tập tin, lưu trữ nó vào bộ nhớ đệm và xuất kết quả ra trình duyệt.
Giả sử chúng ta có một file văn bản có tên "webdictionary.txt", được lưu trữ trên máy chủ, nội dung như sau:
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language
Chúng ta sẽ sử dụng hàm readfile()
trong PHP để đọc file webdictionary.txt và xuất kết quả ra màn hình chính
Hàm readfile()
rất hữu ích khi chúng ta muốn tạo một tập tin lưu trữ riêng và sử dụng PHP để đọc nội dung của nó khi cần thiết.
PHP cung cấp một phương pháp tốt hơn để mở một tập tin là sử dụng hàm fopen()
. Chức năng của hàm này cung cấp cho chúng ta nhiều lựa chọn hơn hàm readfile()
.
Chúng ta sẽ sử dụng lại ví dụ ở trên, và dùng hàm fopen()
để mở file 'webdictionary.txt', xuất kết quả ra màn hình chính.
Ví dụ:
AJAX = Asynchronous JavaScript and XML CSS = Cascading Style Sheets HTML = Hyper Text Markup Language PHP = PHP Hypertext Preprocessor SQL = Structured Query Language SVG = Scalable Vector Graphics XML = EXtensible Markup Language
Tham số đầu tiên của hàm fopen()
chứa tên của tập tin sẽ được mở và tham số thứ hai chỉ định tập tin sẽ được mở ở chế độ nào. Và sẽ tạo thông báo nếu hàm fopen()
không thể mở được tập tin.
<?php $myfile = fopen("webdictionary.txt","r") or die("Không thể mở tập tin!"); echo fread($myfile,filesize("webdictionary.txt")); fclose($myfile); ?>
Các tham số mở file có các tùy chọn như sau:
Tham số | Mô tả |
r | Mở file ở chế độ read only |
w | Mở file ở chế độ write only. Xóa nội dung và ghi đè lên file hiện có hoặc tạo một file mới nếu file đó không tồn tại |
a | Mở file ở chế độ write only. Dữ liệu hiện có trong file được giữ nguyên hoặc tạo một file mới nếu file đó không tồn tại |
x | Tạo một file mới ở chế độ write only. Trả về false nếu file hiện có đã tồn tại |
r+ | Mở file ở chế độ read/write. |
w+ | Mở file ở chế độ read/write. Xóa nội dung của file hoặc tạo file mới nếu file đó không tồn tại |
a+ | Mở file ở chế độ read/write. Dữ liệu hiện có trong file được giữ nguyên. Tạo file mới nếu file không tồn tại |
x+ | Tạo một file ở chế độ read/write. Trả về false nếu file hiện có đã tồn tại |
Hàm fopen()
còn được sử dụng để tạo ra một tập tin mới. Nếu như chúng ta sử dụng hàm fopen()
để mở một file không tồn tại, thì nó sẽ tạo mới file đó, với điều kiện file đó được mở với tham số (w) hoặc (a)
Ví dụ: Tạo một file mới có tên "testfile.txt". File sẽ được tạo trong cùng một thư mục chứa mã PHP.
$mynewfile = fopen("testfile.txt","w");
Chức năng của hàm fread()
dùng để đọc một file đang mở. Tham số đầu tiên của hàm fread()
chứa tên file cần đọc, tham số thứ hai chỉ định số byte tối đa được phép đọc
Như ví dụ ở trên, hàm fread()
đọc file webdictionary.txt từ đầu đến cuối file
fread($myfile, filesize("webdictionary.txt"));
Hàm fclose()
được dùng để đóng một tập tin đang mở
Sau khi thao tác xong với một file PHP, bạn nên đóng chúng lại để hạn chế việc file còn tồn tại trên bộ nhớ máy chủ và chiếm dụng tài nguyên quý giá của server
Như ví dụ ở trên, hàm fclose()
được sử dụng để đóng file webdictionary.txt sau khi hoàn thành việc đọc dữ liệu từ file đó
<?php $myfile = fopen("webdictionary.txt","r"); // your code here fclose($myfile); ?>
Hàm fgets()
được sử dụng để đọc một dòng duy nhất từ một tập tin
Ví dụ: Dùng hàm fgets()
để xuất ra một dòng đầu tiên từ file webdictionary.txt
<?php $myfile = fopen("webdictionary.txt","r") or die("Không thể mở file"); echo fgets($myfile); fclose($myfile); ?>
Lưu ý
Sau khi gọi hàm
fgets()
thì dấu nhắc con trỏ chuột sẽ chuyển tới dòng tiếp theo
Hàm feof()
dùng để kiểm tra một file xem đã tới cuối file hay chưa, hàm này thường được sử dụng kết hợp với vòng lặp khi đọc một file dữ liệu có độ dài chưa xác định
Ví dụ:
<?php $myfile = fopen("webdictionary.txt","r") or die("Không thể đọc file"); // Xuất dữ liệu một dòng, cho tới cuối dòng while(!feof($myfile)){ echo fgets($myfile).'<br/>'; } fclose($myfile); ?>
Hàm fgetc()
dùng để đọc một ký tự duy nhất từ một tập tin
Ví dụ: Sử dụng hàm fgetc()
đọc từng ký tự trong file webdictionary.txt cho tới ký tự cuối cùng của file
<?php $myfile = fopen("webdictionary.txt","r") or die("Không thể đọc file"); // Xuất dữ liệu một ký tự, cho tới ký tự cuối cùng while(!feof($myfile)){ echo fgetc($myfile).'<br/>'; } fclose($myfile); ?>
Lưu ý
Sau khi gọi hàm
fgetc()
thì dấu nhắc con trỏ chuột sẽ chuyển tới ký tự tiếp theo
Hàm fwrite()
được sử dụng để ghi dữ liệu vào một tập tin
Hàm fwrite()
có 2 tham số. Tham số đầu tiên là tên file cần ghi, và tham số thứ 2 là nội dung cần ghi
Ví dụ: Ghi nội dung sau vào file newfile.txt
<?php $myfile = fopen("newfile.txt", "w") or die("Không thể mở file!"); $txt = "John Doe\n"; fwrite($myfile, $txt); $txt = "Jane Doe\n"; fwrite($myfile, $txt); echo $myfile; fclose($myfile); ?>
Bây giờ chúng ta mở file newfile.txt lên sẽ có kết quả như sau
Bây giờ file "newfile.txt" đã có dữ liệu được ghi, chúng ta có thể thực hiện một lệnh ghi mới. Và tất cả dữ liệu hiện có sẽ bị ghi đè và mất đi, chúng ta sẽ có file chứa dữ liệu mới.
Ví dụ:
<?php $myfile = fopen("newfile.txt", "w") or die("Không thể mở file!"); $txt = "Mickey Mouse\n"; fwrite($myfile, $txt); $txt = "Minnie Mouse\n"; fwrite($myfile, $txt); fclose($myfile); ?>
Và bây giờ, file newfile.txt chứa dữ liệu mới được ghi