file_get_contents
được tích hợp sẵn trong PHP và có thể được sử dụng mà không cần cài đặt bất kỳ phần phụ thuộc nào. Nó tốt cho các yêu cầu đơn giản [mặc dù bạn cũng có thể thực hiện các yêu cầu POST], nhưng e. g. truy xuất chi tiết trạng thái phản hồi và tiêu đề là cồng kềnh
cURL
là thư viện và công cụ dòng lệnh để thực hiện các yêu cầu mạng - không chỉ HTTP mà còn cả IMAP, SMTP và các yêu cầu khác. Nó yêu cầu tiện ích mở rộng curl PHP, có thể không được cài đặt trên máy mà mã của bạn đang chạy. Nó có một giao diện thủ tục
guzzle
là thư viện vùng người dùng PHP cung cấp giao diện dựa trên đối tượng cho các yêu cầu HTTP. Bạn cần cài đặt nó trong mọi trường hợp để sử dụng nó
Sự khác biệt giữa curl và file_get_contents
Trong hướng dẫn này, tôi sẽ giải thích sự khác biệt giữa curl và file_get_contents.
PHP cung cấp hai tùy chọn chính để lấy tệp từ xa, cuộn tròn và tệp_get_contents. Có rất nhiều sự khác biệt giữa hai.
file_get_contents - Đây là hàm lấy nội dung của tệp
curl - Đây là một thư viện. curl hỗ trợ chứng chỉ HTTPS, HTTP POST, HTTP PUT, tải lên FTP Tải lên dựa trên biểu mẫu HTTP, proxy, cookie.
file_get_contents[] đối với tệp từ xa, tệp này rất chậm và không xử lý chuyển hướng, bộ nhớ đệm, cookie.
Curl là giải pháp thay thế file_get_contents nhanh hơn nhiều.
Sử dụng Curl.
?php
Using file_get_contents:
?php
Có một số cách trong PHP để gửi yêu cầu HTTP hoặc nhận phản hồi HTTP. Các phương pháp được sử dụng phổ biến nhất là
- Tập hồ sơ. sử dụng hàm PHP file_get_contents[]. Chức năng này có sẵn trong mọi phiên bản của PHP
- Xoăn. cURL/libcurl là lib của bên thứ ba, đã được thêm vào PHP sau phiên bản 4. 0. 2
- Tiện ích mở rộng PECL_HTTP. Phần mở rộng PECL phải được cài đặt trước khi sử dụng
Tiểu sử
Các lập trình viên PHP có thể bị nhầm lẫn bởi tất cả các loại thư viện HTTP khác nhau. Sự khác biệt giữa chúng là gì? . Vì vậy, tôi muốn chia sẻ kinh nghiệm và hiểu biết của mình về mã hóa HTTP trong bài viết này
So sánh trên HTTP libs
Chúng tôi sẽ so sánh ba phương pháp này trong một ví dụ thực tế - mô phỏng việc gửi phiếu yêu cầu hỗ trợ trên cubebackup. com/hỗ trợ. php
- Phương pháp luồng tệp
hàm file_get_contents ban đầu được thiết kế để đọc nội dung của tệp thành một chuỗi. Tuy nhiên, nó cũng hỗ trợ giao thức HTTP để gửi các yêu cầu GET/POST.
Rất thuận tiện và đơn giản khi sử dụng phương thức này cho các thao tác HTTP đơn giản. Tuy nhiên, do tính đơn giản của nó, nó không phù hợp với các giao tiếp HTTP phức tạp, chẳng hạn như chuyển liên tục điểm dừng, báo cáo tiến trình tải lên/tải xuống, chức năng gọi lại, v.v.
PHP
// using file_get_contents to submit a support ticket $post_array = array [ "email" => "someone@gmail.com", "problem" => "error happened on backing up Google Drive files...bla bla bla" ]; $post_string = http_build_query[$post_array]; $opts = array[ 'http' => array[ 'method' => "POST", 'header' => "Content-Type: application/x-www-form-urlencoded", 'content'=> $post_string ] ]; $context = stream_context_create[$opts]; $result = file_get_contents['//www.cubebackup.com/ticketsubmit.php', false, $context]; if [$result === FALSE] { // ... } else{ // ... }
- Sử dụng curl lib
CURL/libcurl có lẽ là thư viện HTTP được sử dụng rộng rãi nhất trong thế giới lập trình. Ban đầu nó được mã hóa bằng ngôn ngữ C, sau đó được chuyển sang nhiều ngôn ngữ khác. Tôi đã sử dụng rất nhiều libcurl trong C++ trong một thời gian khá lâu và nó không bao giờ làm tôi thất vọng.
Bất kể về chức năng, hiệu suất hay phong cách mã hóa, CURL luôn có thể đáp ứng mong đợi của bạn. Đặc biệt, CURL có thể xử lý các thao tác HTTP phức tạp một cách tinh tế, chẳng hạn như các yêu cầu HTTP không đồng bộ, báo cáo tiến độ, v.v.
Vấn đề duy nhất của curl/libcurl mà tôi có thể nghĩ đến là nó cần một chút thời gian, ít nhất là vài giờ, để làm quen với các chức năng và phong cách viết mã của nó.
PHP
// using CURL lib to do the same job $post_array = array [ "email" => "someone@gmail.com", "problem" => "error happened on backing up Google Drive files...bla bla bla" ]; $post_data = http_build_query[$post_array]; $ch = curl_init[]; curl_setopt[$ch, CURLOPT_URL, '//www.cubebackup.com/ticketsubmit.php']; curl_setopt[$ch, CURLOPT_RETURNTRANSFER, TRUE]; curl_setopt[$ch, CURLOPT_POST, TRUE]; curl_setopt[$ch, CURLOPT_POSTFIELDS, $post_data]; curl_setopt[$ch, CURLOPT_SSL_VERIFYPEER, FALSE]; $res = curl_exec[$ch]; curl_close[$ch]; if [$res === FALSE] { // .. } else { // ... }
- Sử dụng tiện ích mở rộng PECL_HTTP
Trên thực tế, tiện ích mở rộng PECL_HTTP cũng dựa trên libcurl. Nó chỉ là một trình bao bọc của libcurl sử dụng tiện ích mở rộng PECL. Nó đã cố gắng đơn giản hóa một số thao tác trong curl/libcurl và thân thiện hơn với các lập trình viên.
Trong hầu hết các trường hợp, so với CURL, việc sử dụng tiện ích mở rộng PECL trên các yêu cầu/phản hồi HTTP sẽ dễ dàng hơn. Tuy nhiên, có một vấn đề lớn trong phần mở rộng PECL_HTTP - nó không được bao gồm trong hầu hết các môi trường PHP hoặc Linux. Điều đó có nghĩa là bạn phải tải xuống và cài đặt tiện ích mở rộng này theo cách thủ công, sau đó biên dịch lại mã nguồn PHP. Thông thường, điều này là cồng kềnh và khiến hầu hết người dùng của nó khiếp sợ.
Một vấn đề khác tôi đã tìm thấy là PECL_HTTP phiên bản 2. 0 không tương thích với phiên bản 1. 0 và phong cách lập trình của nó đã thay đổi hoàn toàn. Rõ ràng, nó vẫn chưa đủ trưởng thành để sử dụng trong sản xuất
PHP
//PECL_HTTP implemention $problemDesc="error happend on backing up Google Drive files.. bla bla bla"; $post_string = "email=someone@gmail.com&problem=".$problemDesc; $res = http_post_data['//www.cubebackup.com/ticketsubmit.php', $post_string]; if [$res === FALSE] { // .. } else { //... }
Phần kết luận
CURL vẫn là thư viện HTTP tốt nhất trong PHP và nó có thể được sử dụng để mã hóa bất kỳ chương trình nào liên quan đến HTTP
file_get_content[] có thể là lựa chọn đầu tiên cho các yêu cầu HTTP POST/GET đơn giản nhưng không phù hợp với mã hóa HTTP phức tạp
Tiện ích mở rộng PECL_HTTP trông đơn giản và thanh lịch hơn, nhưng nó cũng không hoàn thiện và thiếu tài liệu. Hơn nữa, nó không khả dụng trong một số môi trường
Giấy phép
Bài viết này, cùng với bất kỳ mã nguồn và tệp liên quan nào, được cấp phép theo Giấy phép Mở Dự án Mã [CPOL]