Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 17: Các hàm xử lý file trong PHP

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,...Và hôm nay mình sẽ giới thiệu với mọi người danh sách các hàm xử lý file trong PHP.

1, Mở file.

-Để mở file trong PHP chúng ta dùng hàm fopen với cú pháp:

fopen(command, mode)

Trong đó:

  • command là đường dẫn đến file các bạn muố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

VD:

// dùng @ để ngăn chặn thông báo lỗi khi sai đường dẫn file
$file = @fopen('data.txt', 'r');
if (!$file)
    echo "Mở file không thành công";
else
    echo "Mở file thành công";

2, Đọc file.

-Trong PHP thông thường chúng ta sẽ đọc file bằng 3 cách sau đây:

Đọc từng ký tự

-Trong PHP chúng ta sử dụng hàm feof để kiểm tra xem đã ở vị trí cuối cùng của file chưa và hàm fgec để đọc từng ký tự của file.

VD:

$file = @fopen('data.txt', 'r');
if (!$file)
    echo "Mở file không thành công";
else {
    while (!feof($file)) { // hàm feof sẽ trả về true nếu ở vị trí cuối cùng của file
        echo fgetc($file);  // đọc ra từng ký tự trong file
    }
}

Đọc từng dòng

-Ở cách này chúng ta vẫn dùng feof để kiểm tra xem vị trí đang duyệt đã ở cuối cùng của file chưa và dùng hàm fgets để in ra từng dùng của file.

VD:

$file = @fopen('data.txt', 'r');
if (!$file)
    echo "Mở file không thành công";
else {
    while (!feof($file)) { // hàm feof sẽ trả về true nếu ở vị trí cuối cùng của file
        echo fgets($file);  // đọc ra từng dòng trong file
    }
}

-Hoặc chúng ta cũng có thể dùng hàm file để  file sang dạng mảng với mỗi dòng của file là một phần tử của mảng.

VD:

$data = @file('data.txt'); // chuyển đổi file sang mảng
foreach ($data as $value) {
    echo $value;
}

Đọc hết file

-Để đọc hết file trong PHP chúng ta có thể dùng hàm fread($file,$filesize)

VD:

$file = @fopen('data.txt', 'r');
if (!$file)
    echo "Mở file không thành công";
else {
    echo fread($file, filesize('data.txt'));//filesize lấy ra dung lượng của file
}

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.

VD:

$file = @fopen('data.txt', 'w');
if (!$file)
    echo "Mở file không thành công";
else {
    $data = 'Tôi ghi dòng này vào file nhé!';
    fwrite($file, $data);
}

4, Đóng file.

-Trong khi code bạn luôn luôn nhớ cho mình quy chế open-closed nghĩa là mở thì phải đóng và trong file cũng thế. Trong PHP các bạn có thể dùng hàm fclose để đóng file.

VD:

$file = @fopen('data.txt', 'w');
if (!$file)
    echo "Mở file không thành công";
else {
    $data = 'Tôi ghi dòng này vào file nhé!';
    fwrite($file, $data);
    fclose($file);
}

5, Các hàm khác.

-Và sau đây là một số hàm xử lý file khác.

Kiểm tra file

-Trong PHP có cung xấp cho chúng ta hàm file_exists() để 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.

VD:

if(file_exists('data.txt'))
    echo 'file tồn tại';
else
    echo 'file không tồn tại';

Kiểm tra quyền ghi file

-Để kiểm tra quyền ghi file 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.

VD:

if(is_writable('data.txt'))
    echo 'Được phép 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()

VD:

echo file_get_contents('data.txt');

Tạo thư mục

-Để tạo file trong PHP chúng ta cũng có thể dùng hàm mkdir(path,mode,recursive,context)

VD:

mkdir('data.txt');

Kiểm tra thư mục

-Để kiểm tra xem thư mục có tồn tại hay không thì các bạn có thể dùng hàm is_dir(path)

VD:

if(is_dir('public'))
    echo 'Tồn tại';
else
    echo 'Không tồn tại';

Đổi tên file

-Để đổi tên file các bạn có thể dùng hàm rename(old,new).

VD: đổi tên file data.txt thành newdata.txt.

rename('data.txt', 'newdata.txt');

Copy file

-Chúng ta sẽ sử dụng hàm copy(path,pathcopy) để copy file

VD: chúng ta cần copy file data.txt sang file datacopy.txt

copy('data.txt', 'data2.txt');

Xóa file

-Chúng ta dùng hàm unlink() để xóa file.

VD:

if(unlink('data.txt'))
    echo 'Thành công';
else
    echo 'Không thành công';

Xem thêm

-Ngoài ra các bạn có thể xem thêm các hàm khác nữa tại đây.

6, Lời kết.

-Qua bài hôm nay mình đã giới thiệu với mọi người về các hàm xử lý file trong PHP còn một phần rất quan trọng nữa là phần upload file thì mình xin phép được trình bài ở phần sau.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

5 Comments

Chào admin!

Cho em hỏi em dùng hàm file_get_contents() để thực hiện lấy nội dung của file nhưng có 1 vấn đề là nếu file đó lớn hơn khoảng 100kb thì hàm đó lại không lấy được. Vậy cho em hỏi có cách nào để lấy được nội dung của những file đó không? Em cảm ơn!

Dũng

5 năm trước

Anh ơi cho em hỏi chút.

vd : 1 folder trong đó có chứa file là:  abc.prt    abc.prt.1  abc.prt.2  abc.prt.3.....abc.prt.n  ( (n=1 n=2  n=3   ............)     

như vậy   abc.prt.n  là phiên bản save sau củng.  còn   abc.prt.1  abc.prt.2.....vv   là file cũ cần bỏ

Em cần một đoạn mã code để save thành đuôi  .bat    khi chạy đoạn mã này thì nó xóa hết các file save trước đó chỉ để lại file sau cùng là  abc.prt.n

em xin cảm ơn

HUNG

5 năm trước

Đoạn code dưới sẽ lấy ra list file trong thư mục và sắp xếp chúng theo thời gian file được tạo trên folder giảm dần, giờ chỉ cần lấy thằng đầu tiên trong list sẽ là thằng mới nhất.

$files = scandir('data', SCANDIR_SORT_DESCENDING);
$newest_file = $files[0];

 

Vũ Thanh Tài

5 năm trước

Cho mình hỏi, để in dữ liệu table mysql ra máy in bằng PHP thì làm sao nhỉ?

hck

4 năm trước

Chào Anh,

Anh cho mình hỏi một chút nhé. Mình muốn in table mysql ra máy in bằng PHP thì làm cách nào nhỉ?

Cám ơn Anh.

hck

4 năm trước

Bình luận

Captcha