Comparaison des performances PHP fopen/file_get_contents et curl

藏色散人
Libérer: 2023-04-07 06:06:01
avant
3925 Les gens l'ont consulté

La différence entre les fonctions fopen, file_get_contents et curl en PHP :

1 fopen/file_get_contents refaire la requête DNS pour chaque requête et ne met pas en cache les informations DNS. .

Mais CURL mettra automatiquement en cache les informations DNS. Les demandes de pages Web ou d'images sous le même nom de domaine ne nécessitent qu'une seule requête DNS. Cela réduit considérablement le nombre de requêtes DNS. Les performances de CURL sont donc bien meilleures que celles de fopen /file_get_contents.

2.fopen/file_get_contents utilise http_fopen_wrapper lors de la demande HTTP et ne restera pas en ligne.

Mais curl oui. De cette façon, curl sera plus efficace lors de la demande répétée de plusieurs liens.

3. La fonction fopen/file_get_contents sera affectée par la configuration de l'option allow_url_open dans le fichier php.ini.

Si la configuration est désactivée, la fonction sera invalide. Curl n'est pas affecté par cette configuration.

4.curl peut simuler une variété de requêtes, telles que les données POST, la soumission de formulaires, etc. Les utilisateurs peuvent personnaliser les requêtes en fonction de leurs propres besoins.

Et fopen /file_get_contents ne peut utiliser que la méthode get pour obtenir des données.

Lorsque file_get_contents récupère le fichier distant, les résultats seront stockés dans une chaîne. La fonction fiels le stockera sous forme de tableau

Par conséquent, je préfère toujours utiliser curl pour accéder à la télécommande. URL. Php a une extension de module curl, qui est très puissante.

Après avoir longuement parlé, tout le monde peut dire qu'il n'y a pas de comparaison en termes de performances, alors jetons un coup d'oeil

#最近需要获取别人网站上的音乐数据。用了file_get_contents函数,但是总是会遇到获取失败的问题,尽管按照手册中的 例子设置了超时,可多数时候不会奏效:
$config['context'] = stream_context_create(array(‘http’ => array(‘method’ => “GET”,
   ’timeout’ => 5//这个超时时间不稳定,经常不奏效
   )
  ));
#这时候,看一下服务器的连接池,会发现一堆类似的错误,让我头疼万分:
file_get_contents(http://***): failed to open stream…
#现在改用了curl库,写了一个函数替换:
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;
}
Copier après la connexion

De cette façon, à l'exception de vrais problèmes de réseau, aucun problème n'est survenu .

Il s'agit d'un test effectué par d'autres à propos de curl et file_get_contents :

file_get_contents Le nombre de secondes nécessaires pour explorer google.com :

2.31319094
2.30374217
2.21512604
3.30553889
2.30124092
Copier après la connexion

Temps utilisé par curl :

0.68719101
0.64675593
0.64326
0.81983113
0.63956594
Copier après la connexion

Y a-t-il un grand écart ?

Haha, d'après mon expérience, ces deux outils sont non seulement différents en vitesse, mais aussi en stabilité.

Il est recommandé aux amis qui ont des exigences élevées en matière de stabilité de la capture des données réseau d'utiliser la fonction curl_file_get_contents ci-dessus. Non seulement elle est stable et rapide, mais elle peut également simuler le navigateur pour usurper l'adresse cible<🎜. >

Regardez un autre exemple

Les résultats de la comparaison de curl et file_get_contents ont été publiés plus tard. En plus de la comparaison des performances de curl et file_get_contents, il inclut également leur comparaison de performances. Avant d'en parler, jetez un œil. regardez le tableau des résultats suivant :

La comparaison des performances de curl avec le code source PHP file_get_contents est la suivante :

<?php 
/** 
* 通过淘宝IP接口获取IP地理位置 
* @param string $ip 
* @return: string 
**/
function getCityCurl($ip) 
{ 
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt ($ch, CURLOPT_URL, $url); 
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    $file_contents = curl_exec($ch); 
    curl_close($ch); 
    $ipinfo=json_decode($file_contents); 
    if($ipinfo->code==&#39;1&#39;){ 
        return false; 
    } 
    $city = $ipinfo->data->region.$ipinfo->data->city; 
    return $city; 
} 
function getCity($ip) 
{ 
    $url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; 
    $ipinfo=json_decode(file_get_contents($url)); 
    if($ipinfo->code==&#39;1&#39;){ 
        return false; 
    } 
    $city = $ipinfo->data->region.$ipinfo->data->city; 
    return $city; 
} 
// for file_get_contents 
$startTime=explode(&#39; &#39;,microtime()); 
$startTime=$startTime[0] + $startTime[1]; 
for($i=1;$i<=10;$i++) 
{ 
   echo getCity("121.207.247.202")."</br>"; 
} 
$endTime = explode(&#39; &#39;,microtime()); 
$endTime = $endTime[0] + $endTime[1]; 
$totalTime = $endTime - $startTime; 
echo &#39;file_get_contents:&#39;.number_format($totalTime, 10, &#39;.&#39;, "")." seconds</br>"; 
//for curl 
$startTime2=explode(&#39; &#39;,microtime()); 
$startTime2=$startTime2[0] + $startTime2[1]; 
for($i=1;$i<=10;$i++) 
{ 
   echo getCityCurl(&#39;121.207.247.202&#39;)."</br>"; 
} 
$endTime2 = explode(&#39; &#39;,microtime()); 
$endTime2=$endTime2[0] + $endTime2[1]; 
$totalTime2 = $endTime2 - $startTime2; 
echo "curl:".number_format($totalTime2, 10, &#39;.&#39;, "")." seconds"; 
?>
Copier après la connexion
vitesse de file_get_contents : 4,2404510975 secondes

vitesse de curl : 2,8205530643 secondes

curl est environ 30 % plus rapide que file_get_contents, le plus important est que la charge du serveur est inférieure.

Résumé

Lorsque file_get_contents est traité fréquemment et petit , ça fait du bien de l'utiliser. Rien d'inhabituel. Si votre dossier est traité par plus de 1 000 personnes. Ensuite, le processeur de votre serveur attend d'être mis à niveau. Par conséquent, je recommande à moi et à tout le monde d'utiliser la bibliothèque curl lors de l'écriture de code PHP à l'avenir.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:learnku.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal