If you don’t analyze the performance carefully in PHP, you will find that file_get_contents and curl have a lot in common. They can both collect files and open files. However, if you compare them carefully, you will find many differences. Let’s take a look at them together. See the difference between file_get_contents and curl.
The difference between fopen, file_get_contents and curl functions in PHP:
1.fopen /file_get_contents will re-do the DNS query for each request and does not cache the DNS information. But CURL will automatically cache DNS information. Requests for web pages or images under the same domain name only require one DNS query. This greatly reduces the number of DNS queries. So the performance of CURL is much better than fopen /file_get_contents.
2.fopen /file_get_contents When requesting HTTP, http_fopen_wrapper is used and will not keeplive. But curl can. In this way, curl will be more efficient when requesting multiple links multiple times.
3. The fopen / file_get_contents function will be affected by the allow_url_open option configuration in the php.ini file. If the configuration is turned off, this function will be disabled. Curl is not affected by this configuration.
4. curl can simulate a variety of requests, such as POST data, form submission, etc. Users can customize requests according to their own needs. And fopen/file_get_contents can only use the get method to obtain data.
When file_get_contents obtains remote files, the results will be stored in a string. The fiels function will store them in an array form
Therefore, I still prefer to use curl to access remote URLs. Php has curl module extension, which is very powerful.
After talking for a long time, you may say that there is no comparison in performance, so let’s take a look
Recently I need to obtain music data from other people's websites. I used the file_get_contents function, but I always encountered the problem of failure to obtain it. Although I set the timeout according to the examples in the manual, it does not work most of the time:
The code is as follows | Copy code | ||||
$config['context'] = stream_context_create(array('http' => array('method' => "GET",
) )); |
代码如下 | 复制代码 |
file_get_contents(http://***): failed to open stream… |
代码如下 | 复制代码 |
function curl_file_get_contents($durl){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $durl); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); curl_setopt($ch, CURLOPT_REFERER,_REFERER_); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $r = curl_exec($ch); curl_close($ch); return $r; } |
The code is as follows | Copy code |
function curl_file_get_contents($durl){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $durl); curl_setopt($ch, CURLOPT_TIMEOUT, 5); curl_setopt($ch, CURLOPT_USERAGENT, _USERAGENT_); curl_setopt($ch, CURLOPT_REFERER,_REFERER_); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $r = curl_exec($ch); curl_close($ch); Return $r; } |
So no more problems other than real network issues.
Here is a test of curl and file_get_contents done by others:
Number of seconds file_get_contents takes to crawl google.com:
2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
Time used by curl:
0.68719101
0.64675593
0.64326
0.81983113
0.63956594
Is there a big gap? Haha, from my experience, these two tools are not only different in speed, but also in stability.
It is recommended that friends who have high requirements for the stability of network data capture use the curl_file_get_contents function above. It is not only stable and fast, but also can fake the browser to spoof the target address
Let’s look at another example
The comparison results of curl and file_get_contents are posted later. In addition to the performance comparison of curl and file_get_contents, it also includes their performance comparison. Before talking about it, take a look at the following result chart:
The performance comparison between curl and file_get_contents PHP source code is as follows:
代码如下 | 复制代码 |
/** |
Test access
http://www.bKjia.c0m
file_get_contents speed: 4.2404510975 seconds
curl speed:2.8205530643 seconds
curl is about 30% faster than file_get_contents, and the most important thing is that the server load is lower.
Summary
When file_get_contents processing is frequent and small, it feels good to use it. Nothing unusual. If your file is processed by 1k+ people. Then your server CPU is waiting for a boost. Therefore, I recommend that I and everyone use the curl library when writing PHP code in the future.