2011-09-21 7 views
5

Estoy ejecutando un sitio de lector de feeds, donde habrá una gran cantidad de RSS alrededor. Tendré que sincronizar esos alimentos con la mayor frecuencia posible, así que encontré estos dos métodos para hacerlo.CURL o file_get_contents para actualizar una lista de feeds?

1 Método: Uso de CURL

$weblog_name = 'MyBlog'; 
$weblog_url = 'http://feeds.feedburner.com/myblog'; 
$ping_url = 'http://ping.feedburner.com'; 

$request = <<<EOT 
<?xml version="1.0" encoding="iso-8859-1"?> 
<methodCall> 
<methodName>weblogUpdates.ping</methodName> 
<params> 
<param> 
    <value> 
    <string>$weblog_name</string> 
    </value> 
</param> 
<param> 
    <value> 
    <string>$weblog_url</string> 
    </value> 
</param> 
</params> 
</methodCall> 
EOT; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $ping_url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request)); 
$result = curl_exec($ch); 
curl_close($ch); 

Segundo método: file_get_contents

file_get_contents("http://feedburner.google.com/fb/a/pingSubmit?bloglink=http://feeds.feedburner.com/myblog"); 

Mi pregunta es cuál es la solución mejor y más rápido para hacer ping al menos 50 alimenta a la vez?

Respuesta

12

Captación de google.com utilizando file_get_contents tomaron (en segundos):

2.31319094 
2.30374217 
2.21512604 
3.30553889 
2.30124092 

CURL tomaron:

0.68719101 
0.64675593 
0.64326 
0.81983113 
0.63956594 

Esto estaba usando la clase de referencia desde http://davidwalsh.name/php-timer-benchmark

1

get_file_contents es más rápido. Hace un http simple sin instancias adicionales

+0

No estoy familiarizado con el enrollamiento , ¿obtiene los contenidos? Quiero decir, ¿cómo funciona? Además, ¿50 get_file_contents será muy lento a la vez? – EnexoOnoma

+1

cURL también obtendrá los encabezados para la solicitud http. Puede agregar sus propios encabezados de solicitud, variables de publicación y servidor proxy en cURL. Sin embargo, para una solicitud de obtención simple, cURL es innecesario. Me parece que cURL demora 10 ms más en mi servidor wamp apache2.2.17 php5.3.5 para http://www.google.com –

+0

@mtopia realmente no hace la diferencia porque get_file_contents es sincrónico, es decir, se ejecuta la siguiente línea solo después de que esta línea haya sido completamente ejecutada –

2

Yo recomendaría considerar el uso de rizo ... aunque podría ser algo de sobrecarga desarrollo a primera vista, es mucho más poderoso que file_get_contents . especialmente si se desea obtener múltiples alimentaciones, las solicitudes múltiples enrollamiento podrían ser digno de mirar:

http://php.net/manual/en/function.curl-multi-init.php

2

Si desea flexibilidad para el futuro (por ejemplo autenticación, cookies, proxy, etc.) y luego usar cURL. La velocidad es casi la misma que file_get_contents() a juzgar por los puntos de referencia (algunos dicen que es más rápido)

Si desea una solución rápida y fácil, utilice File_get_contents(). Sin embargo, no fue creado con el propósito de solicitar URL externas. La mayoría de las personas juran por cURL por hacer cualquier trabajo con URL externas, incluso simples solicitudes GET.

El único trabajo adicional con el uso de cURL es unas pocas líneas adicionales de código, envuélvalas en una función y listo.

3

Dado que va a actualizar 50 alimenta a la vez, sugeriría fuertemente usando CURL por dos razones:

  1. puede utilizar curl_multi() funciones que le permiten enviar todas las 50 solicitudes de una vez, mientras que file_get_contents() solo irá al uno a uno. La documentación para estas funciones es un poco escasa, así que sugeriría utilizar una biblioteca liviana: es mucho más fácil trabajar con . Yo personalmente uso https://github.com/petewarden/ParallelCurl, pero encontrará muchos alrededor.

  2. Como está haciendo ping a los servicios, realmente no necesita saber la respuesta, supongo (siempre que sea HTTP 200). De modo que podría usar la opción CURLPTOBODY de CURL para convertirla en una solicitud HEAD, , por lo tanto, como respuesta, también obtendría los encabezados. Esto debería velocidad hasta el proceso aún más.

En caso contrario, file_get_contents puede ser más rápido para solicitudes simples, pero en este caso su situación no es simple. Disparar 50 solicitudes sin realmente necesitar recuperar todo el documento no es una solicitud estándar.

Cuestiones relacionadas