2012-08-15 10 views
5

Mam ten problem z pętlą przy użyciu cURL gdzie pamięć rośnie wykładniczo. W tym przykładowym skrypcie zaczyna używać około 14 MB pamięci, a kończy się 28 MB, a mój oryginalny skrypt powtarza się do 1.000.000, a pamięć rośnie do 800 MB, co jest złe.Wzrost pamięci pętli cURL

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

Czy wypróbowałeś 'curl_multi_init'? Może to pomaga. http://tr.php.net/manual/en/function.curl-multi-init.php –

+0

Próbuję curl_multi, bud to ten sam problem, nawet jeśli jest wolniejszy. – user1173536

Odpowiedz

0

Rozwiązaniem byłoby nazwać zwijanie mniej (powiedzmy 100 razy), a następnie do odświeżania stron, co może pozwolić pamięć być zwolnione.

4

Myślę, że znalazłem poprawkę do wycieku pamięci. Mam ten sam problem z używaniem curl lib w skrypcie PHP. Po wielokrotnych wywołaniach funkcji curl_exec() pamięć zostaje wyczerpana.

Według PHP bug report ten przeciek pamięci może być ustalona wyłączające Curl obsługi po zamknięciu go, podobnie jak następnego kodu:

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

Dzięki, ale to jest w moim kodzie i bez efektu. Pamięć wciąż rośnie – user1173536

0

Jest późno, ale polecam przed użyciem curl_close w tym przypadku, lub jeśli zrobić, umieszczając go poza pętlą for.

Mieliśmy podobny problem, gdy pamięć curl zaczęła wyciekać po wielu pętlach. Użyliśmy curl_multi i zamknęliśmy każdą z indywidualnych handlerów, co spowodowało, że nasza pamięć uległa zmianie. Nadpisywanie programu obsługi curl_init wydaje się być więcej niż wystarczające. Wydaje się, że występuje problem z curl_close.

Powiązane problemy