Xử lý file trong PHP

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.

Xử lý file trong php


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 đọc file PHP readfile()


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

Ví dụ:

<?php
echo readfile("webdictionary.txt");
?>

Xem kết quả

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.

Hàm mở file PHP fopen()


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);
?>

Xem kết quả

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");

Hàm đọc file PHP fread()


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 đóng file PHP fclose()


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 đọc một dòng PHP fgets()


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);
?>

Xem kết quả

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 kiểm tra cuối file PHP feof()


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);
?>

Xem kết quả

Hàm đọc ký tự đơn PHP fgetc()


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);
?>

Xem kết quả

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 ghi file PHP fwrite()


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

John Doe
Jane Doe

Ghi đè dữ liệu PHP

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

Mickey Mouse
Minnie Mouse