2012-08-15 8 views
5

Tengo este problema con un bucle con cURL donde la memoria crece exponencialmente. En este script de ejemplo, comienza a usar aproximadamente 14MB de memoria y termina con 28MB, con mi script original y repitiendo a 1,000,000, la memoria crece a 800MB, lo que es malo.cURL bucle de crecimiento de la memoria

PHP 5.4.5
cURL 7.21.0

for ($n = 1; $n <= 1000; $n++){ 

    $apiCall = 'https://api.instagram.com/v1/users/' . $n . '?access_token=5600913.47c8437.358fc525ccb94a5cb33c7d1e246ef772'; 

    $options = Array(CURLOPT_URL => $apiCall, 
        CURLOPT_RETURNTRANSFER => true, 
        CURLOPT_FRESH_CONNECT => true 
    ); 

    $ch = curl_init(); 
    curl_setopt_array($ch, $options); 
    $response = curl_exec($ch); 
    curl_close($ch); 

    unset($ch); 
} 
+0

¿Ha intentado 'curl_multi_init'? Tal vez ayuda. http://tr.php.net/manual/en/function.curl-multi-init.php –

+0

Intento curl_multi, ese es el mismo problema, incluso es más lento. – user1173536

Respuesta

0

Una solución sería llamar rizo menos (por ejemplo 100 veces) y luego para actualizar la página, lo que puede permitir que la memoria sea liberada.

4

Creo que encontré una solución a la pérdida de memoria. Tengo el mismo problema al usar curl lib en un script PHP. Después de repetidas llamadas a la función curl_exec(), la memoria se agota.

Según un PHP bug report esta pérdida de memoria puede ser fijo desarmar el manejador Curl después de cerrarlo, como código siguiente:

... 
curl_close($ch); 
unset($ch); 
+0

Gracias, pero esto está en mi código, y no tiene efecto. La memoria aún crece – user1173536

0

Esta es tarde, pero recomiendo contra el uso de curl_close en este caso, o si hacer, colocándolo fuera del ciclo for.

Tuvimos un problema similar en el que la memoria curl comenzó a gotear después de muchos bucles. Estábamos usando curl_multi y cerrando cada uno de los manejadores individuales, lo que causó que nuestra memoria se volviera loca. Sobrescribir el controlador con curl_init parece ser más que suficiente. Parece que hay un problema con curl_close.

Cuestiones relacionadas