Hàm fopen trong PHP

25/07/2020 - lượt xem
Chia sẻ
 
Rate this post

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

Hàm fopen () dùng để mở tệp hoặc URL. – Lưu ý:  Khi ghi vào tệp văn bản, hãy đảm bảo sử dụng đúng ký tự kết thúc dòng! Các hệ thống Unix sử dụng \ n, các hệ thống Windows sử dụng \ r \ n và các hệ thống Macintosh sử dụng \ r làm ký tự kết thúc dòng. Windows cung cấp cờ dịch (‘t’) sẽ dịch \ n sang \ r \ n khi làm việc với tệp. Bạn cũng có thể sử dụng ‘b’ để buộc chế độ nhị phân. Để sử dụng các cờ này, chỉ định ‘b’ hoặc ‘t’ là ký tự cuối cùng của tham số chế độ.

Cú pháp.

Cú pháp:

fopen ( string $filename , string $mode [, bool $use_include_path = FALSE  [, resource $context ]] ) : resource

Trong đó.

  • $filename – Nếu tên tệp có dạng “scheme: // …”, thì nó được coi là một URL và PHP sẽ tìm kiếm một trình xử lý giao thức (còn được gọi là trình bao bọc) cho scheme đó. Nếu không có trình bao bọc nào cho giao thức đó được đăng ký, PHP sẽ phát ra một thông báo để giúp bạn theo dõi các vấn đề tiềm ẩn trong tập lệnh của mình và sau đó tiếp tục như thể tên tệp chỉ định một tệp thông thường. – Nếu PHP đã quyết định rằng tên tệp chỉ định một tệp cục bộ, thì nó sẽ cố mở một luồng trên tệp đó. Tệp phải có thể truy cập được bằng PHP, vì vậy bạn cần đảm bảo rằng các quyền truy cập tệp cho phép truy cập này. Nếu bạn đã bật chế độ an toàn hoặc open_basingir, có thể áp dụng các hạn chế khác. – Nếu PHP đã quyết định rằng tên tệp chỉ định một giao thức đã đăng ký và giao thức đó được đăng ký dưới dạng URL mạng, PHP sẽ kiểm tra để đảm bảo rằng allow_url_fopen được bật. Nếu nó bị tắt, PHP sẽ phát ra một cảnh báo và cuộc gọi fopen sẽ thất bại. *Lưu Ý: Danh sách các giao thức được hỗ trợ có thể được tìm thấy trong Giao thức và Trình bao bọc được Hỗ trợ. Một số giao thức (còn được gọi là trình bao bọc) hỗ trợ bối cảnh và / hoặc tùy chọn php.ini. Tham khảo trang cụ thể cho giao thức được sử dụng để biết danh sách các tùy chọn có thể được đặt. (ví dụ: giá trị php.ini user_agent được sử dụng bởi trình bao bọc http). – Trên nền tảng Windows, hãy cẩn thận để thoát khỏi bất kỳ dấu gạch chéo ngược nào được sử dụng trong đường dẫn đến tệp hoặc sử dụng dấu gạch chéo về phía trước.
    <?php
    $handle = fopen("c:\\folder\\resource.txt", "r");
    ?>
  • $mode Chỉ định loại quyền truy cập bạn yêu cầu vào tệp / luồng.
    • “r” – Chỉ có thể đọc (bắt đầu đọc từ vị trí đầu tiên của tập tin)
    • “r+” – Có thể đọc và viết (bắt đầu đọc từ vị trí đầu tiên của tập tin, đối với trường hợp viết thì nó sẽ thay thế toàn bộ nội dung của tập tin bằng nội dung mới)
    • “w” -Chỉ có thể viết (mở và xóa toàn bộ nội dung của tập tin, nếu tập tin không tồn tại thì nó sẽ được tạo)
    • “w+” – Có thể đọc và viết (mở và xóa toàn bộ nội dung của tập tin, nếu tập tin không tồn tại thì nó sẽ được tạo)
    • “a” – Chỉ có thể viết (bảo tồn toàn bộ nội dung ban đầu của tập tin bằng cách viết nội dung mới vào vị trí cuối cùng của tập tin, nếu tập tin không tồn tại thì nó sẽ được tạo)
    • “a+” – Có thể đọc và viết (bảo tồn toàn bộ nội dung ban đầu của tập tin bằng cách viết nội dung mới vào vị trí cuối cùng của tập tin, nếu tập tin không tồn tại thì nó sẽ được tạo)
    • “x” – Chỉ có thể viết (tạo một tập tin mới, nếu tập tin đã tồn tại thì nó sẽ trả về giá trị FALSE và hiện thông báo lỗi)
    • “x+” – Có thể đọc và viết (tạo một tập tin mới, nếu tập tin đã tồn tại thì nó sẽ trả về giá trị FALSE và hiện thông báo lỗi)
    • “c” – Chỉ viết. Mở tệp; hoặc tạo một tệp mới nếu nó không tồn tại. Đặt con trỏ tập tin vào đầu tập tin
    • “c+” – Đọc và viết. Mở tệp; hoặc tạo một tệp mới nếu nó không tồn tại. Đặt con trỏ tập tin vào đầu tập tin
    • “e” – Chỉ có sẵn trong PHP được biên dịch trên các hệ thống tuân thủ POSIX.1-2008.
  • $use_include_path Không bắt buộc. Đặt tham số này thành ‘1’ nếu bạn muốn tìm kiếm tệp trong tệp bao gồm (trong php.ini)
  • $context Không bắt buộc. Chỉ định bối cảnh của xử lý tập tin. Ngữ cảnh là một tập hợp các tùy chọn có thể sửa đổi hành vi của luồng – Lưu ý: Hỗ trợ ontext  đã được thêm vào với PHP 5.0.0. Để biết mô tả về context, hãy tham khảo Streams.

Giá trị trả về.

  • TRUE về thành công, FALSE và một lỗi về thất bại. Bạn có thể ẩn lỗi bằng cách thêm “@” vào trước tên hàm.

Sự thay đổi.

  • PHP 7.1: Đã thêm tùy chọn “e”
  • PHP 5.2: Đã thêm tùy chọn “c” và “c +”

Ví dụ.

Ví dụ # 1 fopen ()

code:

<?php
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:[email protected]/somefile.txt", "w");
?>

Ghi chú.

  • Các  hệ điều hành khác nhau có các quy ước kết thúc dòng khác nhau. Khi bạn viết một tệp văn bản và muốn chèn ngắt dòng, bạn cần sử dụng (các) ký tự kết thúc dòng chính xác cho hệ điều hành của mình. Các hệ thống dựa trên Unix sử dụng \ n làm ký tự kết thúc dòng, các hệ thống dựa trên Windows sử dụng \ r \ n làm ký tự kết thúc dòng và hệ thống dựa trên Macintosh (Mac OS Classic) đã sử dụng \ r làm ký tự kết thúc dòng. – Nếu bạn sử dụng sai ký tự kết thúc dòng khi viết tệp của mình, bạn có thể thấy rằng các ứng dụng khác mở các tệp đó sẽ “trông buồn cười”. – Windows cung cấp cờ dịch chế độ văn bản (‘t’) sẽ dịch trong suốt \ n sang \ r \ n khi làm việc với tệp. Ngược lại, bạn cũng có thể sử dụng ‘b’ để buộc chế độ nhị phân, sẽ không dịch dữ liệu của bạn. Để sử dụng các cờ này, chỉ định ‘b’ hoặc ‘t’ là ký tự cuối cùng của tham số chế độ. – Chế độ dịch mặc định là ‘b’. Bạn có thể sử dụng chế độ ‘t’ nếu bạn đang làm việc với các tệp văn bản thuần túy và bạn sử dụng \ n để phân định các kết thúc dòng trong tập lệnh của mình, nhưng hy vọng các tệp của bạn có thể đọc được bằng các ứng dụng như phiên bản notepad cũ. Bạn nên sử dụng ‘b’ trong tất cả các trường hợp khác. – Nếu bạn chỉ định cờ ‘t’ khi làm việc với các tệp nhị phân, bạn có thể gặp sự cố lạ với dữ liệu của mình, bao gồm các tệp hình ảnh bị hỏng và các sự cố lạ với các ký tự \ r \ n.
  • Đối với tính di động, chúng tôi khuyên bạn nên viết lại mã sử dụng hoặc dựa vào chế độ ‘t’ để nó sử dụng kết thúc dòng chính xác và chế độ ‘b’.
  • Cảnh báo Khi sử dụng SSL, Microsoft IIS sẽ vi phạm giao thức bằng cách đóng kết nối mà không gửi chỉ báo close_notify. PHP sẽ báo cáo đây là “SSL: Lỗi giao thức nghiêm trọng” khi bạn đến cuối dữ liệu. Để giải quyết vấn đề này, giá trị của error_Vporting nên được hạ xuống mức không bao gồm các cảnh báo. PHP có thể phát hiện phần mềm máy chủ IIS bị lỗi khi bạn mở luồng bằng cách sử dụng trình bao bọc https: // và sẽ chặn cảnh báo. Khi sử dụng fsockopen () để tạo ổ cắm ssl: //, nhà phát triển có trách nhiệm phát hiện và triệt tiêu cảnh báo này.
  • Lưu ý: Khi safe mode  được bật, PHP sẽ kiểm tra xem thư mục mà tập lệnh đang hoạt động có cùng UID (chủ sở hữu) với tập lệnh đang được thực thi hay không.
  • Nếu bạn gặp vấn đề với việc đọc và ghi vào tệp và bạn đang sử dụng phiên bản mô-đun máy chủ của PHP, hãy nhớ đảm bảo rằng các tệp và thư mục bạn đang sử dụng có thể truy cập được vào quy trình máy chủ.
  • Chức năng này cũng có thể thành công khi tên tệp là một thư mục. Nếu bạn không chắc tên tệp là tệp hay thư mục, bạn có thể cần sử dụng hàm is_dir () trước khi gọi fopen ().

Hàm liên quan.

Thông tin thêm.

  • Lưu ý – sử dụng fopen trong chế độ ‘w’ sẽ KHÔNG cập nhật thời gian sửa đổi (thời gian quay phim) của tệp như bạn mong đợi. Bạn có thể muốn đưa ra một liên lạc () sau khi viết và đóng tệp cập nhật thời gian sửa đổi của nó. Điều này có thể trở nên quan trọng trong một tình huống lưu trữ, nếu bạn có ý định giữ tóc của bạn. Điều này có lẽ cần thử nghiệm thêm, nhưng nó dường như hoạt động giống hệt với việc thực hiện fnmatch riêng.
  • Với php 5.2.5 trên Apache 2.2.4, việc truy cập các tệp trên máy chủ ftp bằng fopen () hoặc readfile () yêu cầu thêm một chuyển tiếp nếu cần một đường dẫn tuyệt đối. tức là, nếu một tệp có tên bullbes.txt được lưu trữ trong / var / school / trên ftp server example.com và bạn đang cố truy cập nó với người dùng hoa và mật khẩu buttercup, url sẽ là: ftp://blossom:[email protected]//var/school/bubbles.txt Lưu ý two forwardslashe. Có vẻ như cái thứ hai là cần thiết vì vậy máy chủ sẽ không diễn giải đường dẫn liên quan đến nhà của hoa trên thị trấn.

Các bạn có thể xem chi tiết hơn trên php.net.

Hi vọng với bài viết này, bạn đã hiểu rõ ứng dụng của hàm fopen() trong PHP. Nếu bạn thấy bài viết hay và có ý nghĩa hãy like và chia sẻ bài viết này để mọi người cùng nhau học tập nhé. Cảm ơn các bạn đã ghé thăm codetutam.com

    Liên hệ với chúng tôi

    Để lại thông tin để nhận được các bài viết khác

    Rate this post

    Xem thêm nhiều bài tin mới nhất về Kiến thức

    Xem thêm