Đa số ứng dụng web đều có xài tới ( dù là sử dụng CSDL MYSQL thì cũng phải cần để ghi thông tin kết nối ra 1 file).
Đa số ứng dụng web đều có xài tới ( dù là sử dụng CSDL MYSQL thì cũng phải cần để ghi thông tin kết nối ra 1 file).
1. Mở file
Để mở file trong PHP, ta sử dụng hàm
fopen.
Hàm này nhận 2 đối số: tên file và chế độ. Cách sử dụng như sau:
$f = fopen(filename, mode);
Trong đó:
Filename là một chuỗi (xâu) cho thấy đường dẫn tới file cần mở.
Ví dụ ̣:
Mode chỉ ra cách thức ta muốn mở file. Sau đây là các giá trị có thể có của mode:
r File mở ở trạng thái chỉ đọc. Con trỏ file đặt ở đầu file.
r+ File mở ở trạng thái cả đọc và ghi. Con trỏ file đặt ở đầu file.
w File mở ở trạng thái chỉ ghi. Nếu file ko tồn tại, nó sẽ
được tạo. Nếu file tồn tại, nội dung sẽ bị xóa. Con trỏ file
đặt ở đầu file.
w+ File mở ở trạng thái cả đọc và ghi. Nếu file tồn tại, nội
dung sẽ bị xóa. Nếu ko tồn tại, file sẽ được tạo. Con trỏ
file đặt ở đầu file.
a File mở ở trạng thái ghi thêm. Con trỏ file đặt ở cuối file.
a+ File mở ở trạng thái đọc và ghi thêm. Con trỏ file đặt ở cuối file.
x File sẽ được tạo ở trạng thái chỉ ghi. Nếu file tồn tại,
hàm trả giá trị FALSE. Nếu file chưa có, hiển nhiên nó sẽ
được tạo.
x+ File sẽ được tạo ở trạng thái cả đọc và ghi. Nếu file tồn
tại, hàm trả giá trị FALSE. Nếu file chưa có, hiển nhiên nó
sẽ được tạo.
2. Mở 1 file "từ xa" (remote file)
Để mở 1 file ko nằm trong máy chủ local, ta có thể sử dụng
hàm fopen như bình thường, chỉ khác filename là địa chỉ của
file cần mở. Ví dụ như sau:
$f = fopen('http://fileserver/userdata.csv', 'r');
3. Đóng file
Sau khi hoàn tất các lệnh với file, bạn cần phải đóng file
lại để báo cho PHP biết mọi việc đã kết thúc. Nó đảm bảo
rằng nội dung file đã được ghi xuống một cách đầy đủ. Ta chỉ
việc dùng hàm
fclose:
4. Đọc file
Bạn có thể dùng một số hàm khác nhau để đọc file.
Hàm
fgets đọc một dòng trong file text và trả lại kết quả là dòng đó.
Hàm
fgetc đọc một ký tự duy nhất và trả lại kết quả là ký tự đó.
Hàm
fread đọc dữ liệu nhị phân và trả lại giá trị vào một buffer.
Thường đọc và ghi nội dung từ file người ta xài mảng.
Để kiểm tra xem đã hết file hay chưa, ta sử dụng feof. Hàm này
trả về giá trị TRUE nếu đã hết file, FALSE nếu vẫn chưa hết.
Cần nhớ, chúng ta phải quan tâm đến vị trí của con trỏ file.
Con trỏ file có thể ở vị trí bắt đầu file (0), hoặc ở cuối
file, hoặc ở chỗ nào đó trong file.
Giờ ta xét ví dụ sau:
function read_text_file($in_filename) {
$file = fopen($in_filename, 'r');
$output = array();
while (!feof($file)) {
$buf = fgets($file);
$output[] = $buf;
}
fclose($file);
return $output;
}
Bạn có thể đoán được: Hàm
read_text_file() trên đây nhận vào một đối số là tên file, sau đó trả về một mảng
$output chứa nội dung file, mỗi phần tử trong mảng là 1 dòng. Cụ thể:
Hàm
fopen() ban đầu sẽ mở file ở chế độ chỉ đọc.
Hàm
$output được khởi tạo là rỗng.
Chừng nào vẫn còn chưa hết file, ta lần lượt dùng
fgets() đọc từng dòng trong file và đưa vào biến $buf. Sau đó gán $buf cho 1 phần tử của mảng $output.
Cuối cùng, ta đóng file đó lại và trả về mảng $output.
Cũng còn một cách khác để đọc file, đó là sử dụng hàm
file_get_contents. Khi sử dụng hàm này, toàn bộ nội dung file
sẽ được trả về trong một xâu duy nhất. Rất tiện lợi, và bạn
ko cần phải dùng đến hàm
fopen hay
fclose. Cứ để PHP tự lo lấy!
5. Ghi file
Khi làm việc với file text, ta ghi file bằng hàm fwrite như sau:
$fruit = array( 'apple', 'orange', 'banana', 'peach');
$file = fopen('fruity.txt', 'w'); // Mo file voi che do ghi
// Ghi tung gia tri trong mang $fruit vao file
foreach ($fruit as $string) {
$result = fwrite($file, $string);
}
fclose($file); // dong file lai
Cực kỳ đơn giản phải ko bạn?
Đoạn code trên mở file
dưới dạng chỉ ghi, sau đó lần lượt duyệt qua các phần từ của
mảng $fruit và ghi chúng vào file.
Tuy vậy, khi làm việc với file nhị phân, chúng ta cần bổ sung thêm một đối số cho hàm
fwrite. Như ví dụ sau đây:
$binary_data = get_image_bytes();
$file = fopen('imagedata.jpg', 'w');
$result = @fwrite($file, $binary_data, mb_strlen($binary_data, '8bit'));
fclose($file);
Đối số thứ 3, ở trong ví dụ trên là
mb_strlen($binary_data, '8bit')
sẽ xác định một cách chính xác số lượng byte ghi vào file.
Nếu ko có giá trị này, ta sẽ gặp những kết quả ko thể dự
đoán trước.
Lưu ý nho nhỏ : để ghi được vào file thì cần phải
CHMOD file đó cho phép ghe ( VD : 666 chẳng hạn) , nếu ko sẽ bị lỗi permission
Thân mến,