Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

file_get_contents or curl in php?

Which of file_get_contents or curl should be used in PHP to make an HTTP request?

If file_get_contents will do the job, is there any need to use curl? Using curl seems to need more lines.

eg:

curl:

$ch = curl_init('http://www.website.com/myfile.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $content); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec ($ch); 
curl_close ($ch); 

file_get_contents:

$output = file_get_contents('http://www.website.com/myfile.php'.$content); 
like image 574
CJ7 Avatar asked Oct 22 '12 03:10

CJ7


2 Answers

First of all cURL has a lot of options to set. You can really set any option you need to - many supported protocols, file-uploads, cookies, proxies and more.

file_get_contents() really just GETs or POSTs the file and has the result.

However: I tried some APIs and did some "benchmarking":

cURL was a lot faster than file_get_contents
Just try it with your terminal: time php curl.php

curl.php:

<?php 
$ch = curl_init();
$options = [
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL            => 'http://api.local/all'
];

curl_setopt_array($ch, $options);
$data = json_decode(curl_exec($ch));
curl_close($ch);

fgc.php

<?php 
$data = json_decode(file_get_contents('http://api.local/all'));

Averaged cURL was 3-10 times faster than file_get_contents in my case. The api.local responeded with a cached JSON file - about 600kb.

I don't think it was coincidence - But that you can't measure this accurately, because the network and the response times differ a lot, based on their current load / network speed / response times etc. (local networks won't change the effect - there will be load & traffic too)

But for certain use cases, it could also be that file_get_contents is actually quicker.

So I built a simple function: https://git.io/J6s9e

like image 184
CodeBrauer Avatar answered Oct 13 '22 00:10

CodeBrauer


Curl is faster then File_get_contents. I just did some quick bench-marking on this.

Fetching google.com using file_get_contents took (in seconds):

2.31319094 
2.30374217
2.21512604
3.30553889
2.30124092

CURL took:

0.68719101
0.64675593
0.64326 
0.81983113
0.63956594
like image 43
Vigneshwar Avatar answered Oct 12 '22 23:10

Vigneshwar