Trong bài này, chúng ta sẽ tìm hiểu về cách create và write file trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.
1. Tạo file với hàm fopen[] trong PHP
Hàm fopen[]
giúp mở một file và đưa file đó vào stream để chuẩn bị đọc/ghi dữ liệu. Cú pháp:
fopen[
string $filename,
string $mode,
bool $use_include_path = false,
?resource $context = null
]: resource|false
Với các $mode là ‘w’, ‘w+’, ‘a’, ‘a+’, ‘x’, ‘x+’ thì hàm fopen[]
giúp tạo một file mới khi file chưa tồn tại. Các bạn có thể tìm hiểu kỹ hơn cách sử dụng hàm fopen[]
tại
Mở file với hàm fopen[] trong PHP.
2. Ghi file với hàm fwrite[] trong PHP
Hàm fwrite[]
được sử dụng để ghi dữ liệu vào file khi đã mở file với hàm fopen[]
. Cú pháp:
fwrite[resource $stream, string $data, ?int $length = null]: int|false
Trong đó,
– $stream là stream đọc file được mở bởi hàm fopen[].
– $data là chuỗi [string] dữ liệu được ghi vào file.
– $length là số byte muốn ghi vào file.
Kết quả trả về của hàm fwrite[]
là số byte ghi được hoặc false nếu ghi file bị lỗi.
Khi mở file bằng hàm fopen[]
với chế độ “w” thì dữ liệu ghi vào file sẽ ghi đè [overwriting] lên dữ
liệu cũ nếu file đã tồn tại. Nếu sử dụng chế độ “a” thì dữ liệu ghi vào file sẽ được ghi nối tiếp vào file.
3. Tạo và ghi file với hàm file_put_contents[] trong PHP
Hàm file_put_contents[]
giúp ghi dữ liệu vào file. Nếu file không tồn tại thì file mới sẽ được tạo. Nếu file tồn tại thì dữ liệu trong file sẽ bị sẽ bị ghi đè. Nếu muốn ghi nối tiếp vào file thì sử dụng $flag = FILE_APPEND
.
Hàm
này có chức năng giống với việc gọi hàm fopen[]
, fwrite[]
và fclose[]
liên tiếp để ghi dữ liệu vào một file. Cú pháp:
file_put_contents[
string $filename,
mixed $data,
int $flags = 0,
?resource $context = null
]: int|false
Trong đó,
– $filename là đường dẫn của file cần ghi dữ liệu.
– $data là dữ liệu cần ghi vào file. $data có thể là string, array hoặc stream resource.
– $flag là các cờ thể hiện chế độ ghi dữ liệu của hàm file_put_contents[]. Có thể kết hợp các flag với nhau bằng toán tử OR [ | ].
Flag | Mô tả |
FILE_USE_INCLUDE_PATH | Có thể tìm file trong include_path. |
FILE_APPEND | Nếu file đã tồn tại, nối tiếp dữ liệu vào file thay vì phải ghi đè file. |
LOCK_EX | Khóa file nếu đang ghi dữ liệu. |
– $context là resource được tạo bởi hàm stream_context_create[].
Kết quả trả về của hàm file_put_contents[]
là số byte được ghi vào file hoặc false nếu ghi file bị lỗi.
Ví dụ ghi đè dữ liệu vào file gochocit.txt
Ví dụ nối dữ liệu vào file gochocit.txt
Trong ví dụ trên, $flag là FILE_APPEND | LOCK_EX
. $flag này có nghĩa là nối dữ liệu vào file gochocit.txt
và khóa file trong khi ghi dữ liệu.
- Hàng đợi [queue] là gì? Cách xây dựng hàng đợi
- Sự khác nhau giữa echo và print trong PHP
- Các thành viên hằng [final] và tĩnh [static] của lớp trong Java
- Hàm is_array[] trong PHP
- Hàm md5[] trong PHP
- Các hàm tạo file, mở - đọc - ghi - đóng file
- Hàm fopen và fclose - mở và đóng file
- Hàm fwrite / fputs - ghi nội dung vào file
- Ví dụ - ghi thêm nội dung vào file
- Hàm fread, đọc nội dung file
- Hàm fgets đọc một chuỗi
- Đọc toàn bộ file, mảng chuỗi
- Hàm file_get_contents
- Hàm file_put_contents
- Một số hàm về file
Các hàm tạo, đọc, ghi file
Phần này trình bày thao tác với file cơ bản với các tác vụ như mở file, đọc nội dung của file trong PHP với các hàm như: fopen[]
fwrite[]
fclose[]
file[]
file_get_contents[]
file_put_contents[]
. Bước đầu tập trung chủ yếu làm việc với chuỗi, còn kỹ thuật làm việc với dữ liệu nhị phân [các mảng byte] sẽ ở nội dung khác.
Nội dung chính
- Các hàm tạo, đọc, ghi file
- Hàm fopen và fclose trong PHP
- Ghi dữ liệu vào file với hàm fwrite / fputs trong PHP
- Ví dụ, ghi thêm nội dung vào file
- Đọc nội dung file, hàm fread trong PHP
- Đọc một chuỗi trong file với hàm fgets trong PHP
- Đọc toàn bộ nội dung file trong PHP
- Đọc toàn bộ nội dung file với hàm file_get_contents trong PHP
- Hàm file_put_contents trong PHP
PHP đưa ra một số hàm với mục đích để làm việc với file như tạo file, đọc file, upload, biên tập ...
Hàm fopen và fclose trong PHP
fopen[] là hàm mở file để chuẩn bị đọc, ghi thông tin, cú pháp như sau:
$file = fopen[$filename, $mode];
$filename tên file với đường dẫn đầy đủ. Hoặc là URL của file cần mở. $mode
chế độ mở file với một số giá trị như sau [chú ý khi mở file, tùy mode
mà con trỏ xác định vị trí đang làm việc có thể ở đầu hoặc cuối file, các mode ở dưới thì a
và a+
con trỏ ở cuối - nối thêm vào file, còn các mode khác con trỏ ở đầu.]:
- "r" - Mở file chỉ để đọc
- "r+" - Mở file dể đọc và ghi
- "w" - Mở file chỉ để ghi, khi mở nội dung trong file bị xóa sạch hoặc nếu file đó không tồn tại thì sẽ cố gắng tạo ra file mới.
- "w+" - Mở file có thể đọc / ghi, khi mở nội dung trong file bị xóa sạch hoặc nếu file đó không tồn tại thì sẽ cố gắng tạo ra file mới.
- "a" - Mở file chỉ để ghi, bắt đầu ghi ở vị trí cuối file, có tạo file mới nếu không tồn tại.
- "a+" - Mở file để đọc/ghi.
- "x" - Tạo file mới để ghi. Trả về false và phát sinh lỗi nếu file đã có
- "x+" - Tạo file mới đọc/ghi. Trả về false và phát sinh lỗi nếu file đã có.
- "c" - Mở file chỉ ghi hoặc tạo mới nếu không tồn tại.
- "c+" - Mở file đọc/ghi hoặc tạo mới nếu không tồn tại.
Nếu mở file thành công nó trả về tài nguyên gắn với stream của file, từ tài nguyên này dùng các hàm khác nhau để đọc, ghi, di chuyển con trỏ.
Hàm feof[$file] là hàm cho biết vị trí đang ở cuối file hay không, trả về true là ở cuối file.
Sau khi thực hiện các tác vụ trên tài nguyên file đang mở thì phải đóng lại để giải phóng tài nguyên bằng cách gọi hàm fclose
Ví dụ sau tạo ra file file.txt
, file tạo ra ở cùng với thư mục chứa code PHP, kết quả trả về là tài nguyên lưu
vào $myfile.
$myfile = fopen["file.txt", "w"]; ... // đóng file fclose[$myfile];
fopen[$filename, $mode] | Mở file, tạo file mới |
fclose[$stream] | Đóng file đang mở |
feof[$stream] | Trả về true nếu con trỏ ở cuối file |
Ghi dữ liệu vào file với hàm fwrite / fputs trong PHP
Sau khi file đã được mở thì bạn có thể ghi dữ liệu [Binary-safe, chuỗi] cần thiết vào file, để làm điều đó dùng hàm fwrite[]
cũng chính là hàm fputs
fwrite[$myfile, $txt]; //$myfile: là file đã được mở để ghi //$text: là chuỗi cần ghi vào file.
Ví dụ sau ghi lại tên hai người vào file names.txt
Chú ý trước khi gọi hàm fwrite[]
cần phải gọi hàm fopen[]
và cuối cùng sau khi ghi xong các nội dung vào file thì cần gọi fclose[]
để đóng file thu hồi tài nguyên hệ thống.
Dùng ký hiệu \n
để ghi dòng mới [xuống dòng].
Ví dụ, ghi thêm nội dung vào file
Nếu muốn nối thêm nội dung vào file, bạn cần mở file với chế độ nối file 'a'
, Ví dụ:
Khi mở file bằng chế độ 'a'
con trỏ file sẽ trỏ đến cuối file, đảm bảo rằng nội dung ghi sẽ nối vào file
Đọc nội dung file, hàm fread trong PHP
Để đọc các byte trong file, sử dụng hàm fread như sau:
fread[$stream,$length];
Với $stream
là file đã mở để đọc và $length
là số byte cần đọc. Bạn có thể dùng hàm filesize[$filename] để lấy cỡ file [bao nhiêu byte]. Ví dụ sau, mở một file ảnh từ địa chỉ URL, sau đó đọc toàn bộ nội dung của file, lưu lại file trên đĩa
Đọc một chuỗi trong file với hàm fgets trong PHP
Hàm fgets[$file] đọc một dòng tại vị trí con trỏ file hiện tại. Nếu vị trí con trỏ ở cuối file hàm sẽ trả về false / lỗi. Để kiểm tra con trỏ hiện tại ở cuối không dùng hàm feof[$file], nếu trả về true là ở cuối.
Ví dụ, mở file đọc tất cả các dòng:
Đọc toàn bộ nội dung file trong PHP
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 toàn bộ nội dung file với hàm file_get_contents trong PHP
Hàm file_get_contents[$filename] - đọc toàn bộ nội dung một file trả về một chuỗi là nội dung đó, tham số chỉ ra là tên filec cần đọc
$content = file_get_contents['//raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md']; echo $content;
Hàm file_put_contents trong PHP
Hàm file_put_contents[$filename, $data, $flag = 0] lưu dữ liệu vào file có tên $filename, dữ liệu $data là một chuỗi, mảng dữ liệu. Nếu $flag = 0 sẽ ghi đè dữ liệu file nếu file tồn tại. Nếu $flag = FILE_APPEND thì nối thêm dữ liệu vào file.
// Ghi nói thêm một chuỗi vào file file_put_contents['names.txt', 'xuanthulab', FILE_APPEND];
unlink[$filename]
| Hàm unlink trong PHP, dùng để xóa file trên đĩa |
copy[$filename_source, $$filename_dest]
| Hàm copy trong PHP, dùng để copy file trên đĩa |
rename[$oldname, $newname]
| Hàm copy trong PHP, dùng để đổi tên file trên đĩa |
file_exists[$filename]
| Hàm file_exists trong PHP, trả về true thì file đang tồn tại |