Sự khác biệt giữa curl và file_get_contents trong php là gì?

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
$url='http. //www. thí dụ. com/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt .
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
?>
Using file_get_contents:
?php
$output = file_get_contents('http. //www. thí dụ. com/');
echo $output;
?>

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à

  1. 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
  2. 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
  3. 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

  1. 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" => "[email protected]",
       "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('http://www.cubebackup.com/ticketsubmit.php', false, $context);

   if ($result === FALSE) {
    //  ...
   }  
   else{
    //  ...
   }

 

  1. 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" => "[email protected]",
      "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, 'http://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 {
   // ...
 } 
 
  1. 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 protected]&problem=".$problemDesc;

  $res = http_post_data('http://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)

file_get_contents có sử dụng cURL không?

hàm file_get_contents(). Hàm PHP này được sử dụng để truy xuất nội dung của tệp. Nội dung có thể được lưu trữ dưới dạng biến chuỗi. . PHP

Làm cách nào để sử dụng cURL thay vì file_get_contents?

hàm file_get_contents_curl($url) { $ch = curl_init(); . //Google. com');

Sự khác biệt giữa hàm file() và file_get_contents() là gì?

file — Đọc toàn bộ nội dung tệp thành một mảng các dòng. file_get_contents — Đọc toàn bộ nội dung tệp thành một chuỗi .

Việc sử dụng file_get_contents trong PHP là gì?

file_get_contents() đọc tệp thành một chuỗi . Hàm này là cách ưa thích để đọc nội dung của tệp thành một chuỗi. Nó sẽ sử dụng các kỹ thuật ánh xạ bộ nhớ, nếu điều này được máy chủ hỗ trợ, để nâng cao hiệu suất.