File_get_contents la gi
- Hàm file_get_contents() dùng để lấy nội dung của một tập tin.- Cú pháp: Show
Nội dung chính
- Tôi có một tập tin myCode_01.html nằm ở đường dẫn http://webcoban.vn/file/myCode_01.html với nội dung như sau: Tai lieu huong dan hoc Lap Trinh WebHTML & CSSNgon ngu lap trinh PHP - Để lấy nội dung của tập tin myCode_01.html thì tôi sử dụng đoạn mã sau: - Khi đó, biến $text sẽ có giá trị là chuỗi: Tai lieu huong dan hoc Lap Trinh WebHTML & CSSNgon ngu lap trinh PHP - Ví dụ phía trên là chúng ta lấy toàn bộ nội dung của tập tin, để lấy một phần nội dung của tập tin thì chúng ta sử dụng cú pháp như sau: file_get_contents(đường dẫn đến tập tin mà bạn muốn lấy nội dung, 0, NULL, start, length)- Trong đó:
- Biến $text sẽ có giá trị là chuỗi: - Biến $text sẽ có giá trị là chuỗi: - Biến $text sẽ có giá trị là chuỗi: ml>Đầu tiên, một sự thật cơ bản về PHP.PHP không được thiết kế để cung cấp cho bạn một giao diện REST thuần túy (GET, POST, PUT, PATCH, DELETE) giống như giao diện để xử lý các yêu cầu HTTP . Tuy nhiên, $_SERVER, $_COOKIE, $_POST, $_GET, và $_FILES superglobals , và các chức năng filter_input_array()rất hữu ích cho nhu cầu người bình thường của / layman. Lợi thế ẩn số một của $_POST(và $_GET) là dữ liệu đầu vào của bạn được PHP giải mã url tự động . Bạn thậm chí không bao giờ nghĩ đến việc phải làm điều đó, đặc biệt là đối với các tham số chuỗi truy vấn trong một GETyêu cầu tiêu chuẩn hoặc dữ liệu nội dung HTTP được gửi cùng với một POSTyêu cầu. Các phương thức yêu cầu HTTP khácNhững người nghiên cứu giao thức HTTP cơ bản và các phương thức yêu cầu khác nhau của nó hiểu rằng có nhiều phương thức yêu cầu HTTP, bao gồm cả phương thức thường được tham chiếu PUT, PATCH(không được sử dụng trong Apigee của Google) và DELETE. Trong PHP, không có superglobals hoặc chức năng lọc đầu vào để nhận dữ liệu nội dung yêu cầu HTTP khi POSTkhông được sử dụng. Các đệ tử của Roy Fielding phải làm gì? ;-) Tuy nhiên, sau đó bạn tìm hiểu thêm ...Điều đó đang được nói, khi bạn nâng cao kiến thức lập trình PHP của mình và muốn sử dụng XmlHttpRequestđối tượng của JavaScript (jQuery đối với một số), bạn sẽ thấy hạn chế của lược đồ này. $_POSTgiới hạn bạn sử dụng hai loại phương tiện trong Content-Typetiêu đề HTTP :
Vì vậy, nếu bạn muốn gửi các giá trị dữ liệu để PHP trên máy chủ, và có nó hiển thị trong $_POSTsuperglobal , sau đó bạn phải URLEncode nó trên client-side và gửi dữ liệu cho biết như cặp khóa / giá trị - một bước bất tiện cho người mới (đặc biệt là khi cố gắng tìm hiểu xem các phần khác nhau của URL có yêu cầu các hình thức mã hóa urlencoding khác nhau hay không: bình thường, thô, v.v.). Đối với tất cả người dùng jQuery của bạn, $.ajax()phương pháp đang chuyển đổi JSON của bạn thành các cặp khóa / giá trị được mã hóa URL trước khi truyền chúng đến máy chủ. Bạn có thể ghi đè hành vi này bằng cách cài đặt processData: false. Chỉ cần đọc tài liệu $ .ajax () và đừng quên gửi đúng loại phương tiện trong tiêu đề Loại-Nội dung. php: // input, but ...Ngay cả khi bạn sử dụng php://inputthay vì $_POSTcho POSTdữ liệu nội dung yêu cầu HTTP của mình , nó sẽ không hoạt động với HTTP Content-Typecủa multipart/form-dataĐây là loại nội dung mà bạn sử dụng trên biểu mẫu HTML khi bạn muốn cho phép tải tệp lên! Do đó, trong PHP truyền thống, để đối phó với một sự đa dạng của các loại nội dung từ một HTTP POSTyêu cầu, bạn sẽ học cách sử dụng $_POSThoặc filter_input_array(POST), $_FILESvà php://input. Không có cách nào để chỉ sử dụng một nguồn đầu vào chung cho các POSTyêu cầu HTTP trong PHP. Bạn không thể tải tệp qua $_POSTfilter_input_array (POST) hoặc php://inputvà bạn cũng không thể tải JSON / XML / YAML trong filter_input_array(POST)hoặc $_POST. Hướng dẫn sử dụng PHP: php: // input
PHP Framework giải cứu?Các khung công tác PHP như Codeigniter 4 và Laravel sử dụng một mặt tiền để cung cấp một giao diện ( IncomingRequesthoặc Requestcác đối tượng) sạch hơn cho phần trên. Đây là lý do tại sao các nhà phát triển PHP chuyên nghiệp sử dụng các khung công tác thay vì PHP thô. Tất nhiên, nếu bạn thích lập trình, bạn có thể tạo ra đối tượng mặt tiền của riêng bạn để cung cấp những gì các khung làm việc. Chính vì tôi đã dành thời gian tìm hiểu vấn đề này nên tôi mới có thể viết câu trả lời này. Mã hóa URL? Cái quái gì vậy !!! ???Thông thường, nếu bạn đang thực hiện một yêu cầu HTTP bình thường, đồng bộ (khi toàn bộ trang vẽ lại) với một biểu mẫu HTML, thì tác nhân người dùng (trình duyệt web) sẽ mã hóa dữ liệu biểu mẫu cho bạn. Nếu bạn muốn thực hiện một yêu cầu HTTP không đồng bộ bằng cách sử dụng XmlHttpRequestđối tượng, thì bạn phải tạo chuỗi urlencoded và gửi nó, nếu bạn muốn dữ liệu đó hiển thị trong $_POSTsuperglobal . Làm thế nào để liên lạc với bạn với JavaScript? :-)Việc chuyển đổi từ một mảng hoặc đối tượng JavaScript sang một chuỗi được mã hóa bằng mã urle làm phiền nhiều nhà phát triển (ngay cả với các API mới như Dữ liệu biểu mẫu ). Họ muốn chỉ có thể gửi JSON và mã máy khách làm như vậy sẽ hiệu quả hơn . Hãy nhớ rằng (nháy mắt, nháy mắt), nhà phát triển web trung bình không học cách sử dụng XmlHttpRequestđối tượng trực tiếp, các hàm toàn cục, hàm chuỗi, hàm mảng và biểu thức chính quy như bạn và tôi ;-). Mã hóa khẩn cấp đối với họ là một cơn ác mộng. ;-) PHP, những gì mang lại?Việc PHP thiếu xử lý XML và JSON trực quan khiến nhiều người không thích. Bạn sẽ nghĩ rằng nó sẽ là một phần của PHP bây giờ (thở dài). Rất nhiều loại phương tiện (loại MIME trong quá khứ)XML, JSON và YAML đều có các loại phương tiện có thể được đưa vào Content-Typetiêu đề HTTP .
Xem có bao nhiêu loại phương tiện (trước đây là loại MIME) được IANA xác định. Xem có bao nhiêu tiêu đề HTTP . php: // input hoặc bustSử dụng php://inputluồng cho phép bạn phá vỡ mức độ trừu tượng của việc trông trẻ / cầm tay mà PHP đã buộc trên thế giới. :-) Với sức mạnh lớn đến trách nhiệm lớn! Bây giờ, trước khi xử lý các giá trị dữ liệu được truyền trực tuyến php://input, bạn nên / phải làm một số việc.
Còn về bảng mã ký tự?AH, HA! Có, bạn có thể muốn luồng dữ liệu được gửi vào ứng dụng của mình được mã hóa UTF-8, nhưng làm thế nào bạn có thể biết nó có hay không? Hai vấn đề quan trọng.
Bạn sẽ cố gắng xử lý dữ liệu luồng mà không biết trước hết là bao nhiêu? Đó là một ý tưởng khủng khiếp . Bạn không thể dựa hoàn toàn vào Content-Lengthtiêu đề HTTP để được hướng dẫn về kích thước của đầu vào được truyền trực tuyến vì nó có thể bị giả mạo. Bạn sẽ cần một:
Bạn có định chuyển đổi dữ liệu luồng sang UTF-8 mà không biết mã hóa hiện tại của luồng không? Làm sao? Bộ lọc luồng iconv ( ví dụ về bộ lọc luồng iconv ) dường như muốn mã hóa bắt đầu và kết thúc, như thế này. Vì vậy, nếu bạn tận tâm, bạn sẽ cần:
( Cập nhật : 'convert.iconv.UTF-8/UTF-8'sẽ buộc mọi thứ thành UTF-8, nhưng bạn vẫn phải tính đến các ký tự mà thư viện iconv có thể không biết cách dịch. Nói cách khác, bạn phải làm thế nào để xác định hành động cần thực hiện khi không thể dịch một ký tự : 1) Chèn một ký tự giả, 2) Lỗi / ném và ngoại lệ). Bạn không thể chỉ dựa vào Content-Encodingtiêu đề HTTP , vì điều này có thể chỉ ra một cái gì đó giống như nén như sau. Đây không phải là điều bạn muốn đưa ra quyết định liên quan đến iconv. Content-Encoding: gzipDo đó, các bước chung có thể là ...Phần I: Liên quan đến Yêu cầu HTTP
Phần II: Liên quan đến Dữ liệu Luồng
Phần III: Kiểu dữ liệu liên quan
(Hãy nhớ rằng, dữ liệu vẫn có thể là một chuỗi được mã hóa URL mà sau đó bạn phải phân tích cú pháp và giải mã URL).
Phần IV: Giá trị dữ liệu liên quan
Bây giờ bạn thấy chưa?Các $_POSTsuperglobal, cùng với các thiết lập php.ini cho giới hạn về đầu vào, là đơn giản hơn cho người không có đạo. Tuy nhiên, xử lý mã hóa ký tự trực quan và hiệu quả hơn nhiều khi sử dụng luồng vì không cần phải lặp qua các siêu cầu (hoặc mảng, nói chung) để kiểm tra các giá trị đầu vào cho mã hóa thích hợp. 50 hữu ích 2 bình luận chia sẻ |