file_get_contents or curl in php?

泄露秘密 提交于 2019-12-18 04:48:06

问题


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); 

回答1:


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.




回答2:


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



回答3:


For your information, curl can you let have more options and use GET/POST method and send parameters.

And file_get_contents will have lesser options for you to GET/POST parameters.

Hope this helps...



来源:https://stackoverflow.com/questions/13004805/file-get-contents-or-curl-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!