Hàm fopen() trong PHP

Định nghĩa và cách sử dụng

Hàm fopen() mở tệp hoặc URL.

Nếu mở thất bại, hàm này sẽ trả về FALSE.

Cú pháp

fopen(filename,mode,include_path,context)
Tham số Mô tả
filename Bắt buộc. Định nghĩa tệp hoặc URL cần mở.
mode Bắt buộc. Định nghĩa loại truy cập yêu cầu đến tệp hoặc luồng. Các giá trị có thể xem trong bảng dưới đây.
include_path Tùy chọn. Nếu cũng cần tra cứu tệp trong include_path, có thể đặt tham số này là 1 hoặc TRUE.
context Tùy chọn. Định nghĩa môi trường của đầu tệp. Context là một tập hợp các tùy chọn có thể thay đổi hành vi của luồng.

Các giá trị có thể của tham số mode

mode thuộc tính
"r" Mở tệp bằng chế độ chỉ đọc, di chuyển con trỏ tệp đến đầu tệp.
"r+" Mở tệp bằng chế độ đọc và ghi, di chuyển con trỏ tệp đến đầu tệp.
"w" Mở tệp bằng chế độ ghi, di chuyển con trỏ tệp đến đầu tệp và giảm kích thước tệp xuống mức zero. Nếu tệp không tồn tại, sẽ thử tạo tệp.
"w+" Mở tệp bằng chế độ đọc và ghi, di chuyển con trỏ tệp đến đầu tệp và giảm kích thước tệp xuống mức zero. Nếu tệp không tồn tại, sẽ thử tạo tệp.
"a" Mở tệp bằng chế độ ghi, di chuyển con trỏ tệp đến cuối tệp. Nếu tệp không tồn tại, sẽ thử tạo tệp.
"a+" Mở tệp bằng chế độ đọc và ghi, di chuyển con trỏ tệp đến cuối tệp. Nếu tệp không tồn tại, sẽ thử tạo tệp.
"x"

Tạo và mở tệp bằng chế độ ghi, di chuyển con trỏ tệp đến đầu tệp. Nếu tệp đã tồn tại, gọi fopen() sẽ thất bại và trả về FALSE, và tạo ra một thông báo lỗi cấp độ E_WARNING. Nếu tệp không tồn tại, sẽ thử tạo tệp.

điều này tương đương với việc chỉ định thẻ O_EXCL|O_CREAT cho gọi hệ thống open(2).

được hỗ trợ bởi PHP 4.3.2 và các phiên bản sau, chỉ có thể được sử dụng cho các tệp địa phương.

x+

tạo và mở tệp với chế độ đọc-viết, di chuyển con trỏ tệp đến đầu tệp. Nếu tệp đã tồn tại, gọi fopen() sẽ thất bại và trả về FALSE, và tạo ra một thông báo lỗi mức E_WARNING. Nếu tệp không tồn tại, sẽ thử tạo tệp.

điều này tương đương với việc chỉ định thẻ O_EXCL|O_CREAT cho gọi hệ thống open(2).

được hỗ trợ bởi PHP 4.3.2 và các phiên bản sau, chỉ có thể được sử dụng cho các tệp địa phương.

thuộc tính

fopen() sẽ filename chỉ định tên tài nguyên được gán vào một luồng. Nếu filename là \\nếu có định dạng \\ filename tiếp tục thực hiện như một tên tệp thông thường.

Nếu PHP nghĩ rằng filename được chỉ định là một tệp địa phương, nó sẽ thử mở một luồng trên tệp đó. Tệp này phải là tệp mà PHP có thể truy cập, vì vậy bạn cần xác nhận rằng quyền truy cập tệp cho phép truy cập này. Nếu đã kích hoạt chế độ an toàn hoặc open_basedir, sẽ áp dụng các hạn chế thêm.

Nếu PHP nghĩ rằng filename được chỉ định là một giao thức đã đăng ký, và giao thức này được đăng ký là một URL mạng, PHP sẽ kiểm tra và xác nhận rằng allow_url_fopen đã được kích hoạt. Nếu tắt, PHP sẽ phát ra một cảnh báo và việc gọi fopen sẽ thất bại.

đối với context được thêm vào PHP 5.0.0.

Cảnh báo và chú thích

Chú thích:Các họ hệ điều hành khác nhau có thói quen kết thúc dòng khác nhau. Khi ghi một tệp văn bản và muốn thêm một dòng mới, bạn cần sử dụng dấu kết thúc dòng phù hợp với hệ điều hành. Các hệ điều hành dựa trên Unix sử dụng \\n làm ký tự kết thúc dòng, các hệ điều hành dựa trên Windows sử dụng \\r\\n làm ký tự kết thúc dòng, và các hệ điều hành dựa trên Macintosh sử dụng \\r làm ký tự kết thúc dòng. Nếu khi ghi tệp đã sử dụng dấu kết thúc dòng không đúng, các ứng dụng khác mở các tệp này có thể hoạt động rất kỳ lạ.

Windows cung cấp một dấu hiệu chuyển đổi văn bản ( ) có thể chuyển đổi \\n thành \\r\\n một cách mờ đục. Đối ứng với điều này, bạn cũng có thể sử dụng \"b\" để buộc sử dụng chế độ nhị phân, điều này sẽ không chuyển đổi dữ liệu. Để sử dụng các dấu hiệu này, bạn phải sử dụng \"b\" hoặc \"t\" làm ký tự cuối cùng của tham số mode.

Mô hình chuyển đổi mặc định phụ thuộc vào SAPI và phiên bản PHP được sử dụng, vì vậy để dễ dàng di chuyển khuyến nghị rằng bạn nên luôn chỉ định dấu chính xác. Nếu bạn làm việc với các tệp văn bản thuần và sử dụng \n làm dấu kết thúc dòng trong vân bản, nhưng vẫn mong muốn các tệp này có thể được đọc bởi các ứng dụng khác như Notepad, thì sử dụng "t" trong mode. Trong tất cả các trường hợp khác, sử dụng "b".

Khi làm việc với các tệp nhị phân mà không chỉ định dấu "b", bạn có thể gặp phải một số vấn đề kỳ lạ, bao gồm các tệp ảnh bị hỏng và các vấn đề kỳ lạ về ký tự \r\n.

Chú thích:Để đảm bảo khả năng di chuyển, khuyến nghị mạnh mẽ rằng bạn nên luôn sử dụng dấu "b" khi mở tệp bằng fopen().

Chú thích:Một lần nữa, để đảm bảo khả năng di chuyển, khuyến nghị mạnh mẽ rằng bạn nên viết lại mã phụ thuộc vào "t" mẫu để sử dụng dấu kết thúc dòng chính xác và thay đổi thành "b" mẫu.

Mô hình

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:password@example.com/test.txt","w");
?>