- 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.
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);
Hàm | chức năng |
---|---|
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
<?php // Mở file để ghi (nội dung cũ bị xóa) hoặc tạo file mới nếu không tồn tại $myfile = fopen("names.txt", "w"); $txt = "John\n"; fwrite($myfile, $txt); $txt = "David\n"; fwrite($myfile, $txt); fclose($myfile); /* Nộ dung file: John David */ ?>
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ụ:
<?php $myFile = "test.txt"; $fh = fopen($myFile, 'a'); fwrite($fh, "Some text"); fclose($fh); ?>
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
<?php $urlImage = 'https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/imgs/html-001.png'; $fImage = fopen($urlImage, 'r'); // Đọc đến cuối file, mõi lần đọc 4000 byte, lưu dữ liệu đọc được vào $data $data = null; while (!feof($fImage)) { $data .= fread($fImage, 4000); } fclose($fImage); echo strlen($data) . ' byte đọc được <br>'; // Lưu dữ liệu đọc được vào file test.png $filename = __DIR__ .'/test.png'; $streamwrite = fopen($filename, 'w'); fwrite($streamwrite, $data); fclose($streamwrite); echo 'Lưu file tại:<br>' . $filename; ?>
Đọ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:
<?php // Mở file để đọc - con trỏ ở đầu $myfile = fopen("https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md", "r"); // Đọc từng dòng của file cho đến khi con trỏ dịch đến cuỗi file (hết file) while(!feof($myfile)) { $line = fgets($myfile); echo $line. "
"; } fclose($myfile); ?>
Đọ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.
<?php $read = file('https://raw.githubusercontent.com/xuanthulabnet/learn-php/master/Readme.md'); foreach ($read as $line) { echo $line ."<br>"; } ?>
Đọ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('https://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);
Một số hàm về file trong PHP
Hàm về file | Diễn giải |
---|---|
unlink($filename) |
Hàm |
copy($filename_source, $$filename_dest) |
Hàm |
rename($oldname, $newname) |
Hàm |
file_exists($filename) |
Hàm |