2012-08-15 2 views
5

메모리가 기하 급수적으로 커지는 cURL을 사용하는 루프에이 문제가 있습니다. 이 예제 스크립트에서는 약 14MB의 메모리를 사용하기 시작하고 28MB로 끝나고 원본 스크립트는 1.000.000으로 반복되고 메모리는 800MB로 증가하며 나쁘다.cURL 루프 메모리 증가

PHP 메모리가 해제 될 수 있도록 할 수있는 페이지 컬 이하 (말을 100 번)를 호출 한 후 새로 고침 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

'curl_multi_init'을 사용해 보셨습니까? 어쩌면 도움이 될지도 모른다. http://tr.php.net/manual/en/function.curl-multi-init.php –

+0

curl_multi를 사용해보십시오. 똑같은 문제인데, 심지어 더 느립니다. – user1173536

답변

0

하나 개의 솔루션이 될 것 5.4.5
컬.

4

나는 메모리 누수 문제를 발견했다고 생각합니다. PHP 스크립트에서 curl lib를 사용하여 동일한 문제가 발생했습니다. curl_exec() 함수를 반복적으로 호출하면 메모리가 고갈됩니다.

PHP bug report에 따르면이 메모리 누수가 다음 코드처럼, 그것을 닫은 후 컬 핸들러를 해제하기 고정 될 수있다 :

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

고마워,하지만 이건 내 코드에 있고 아무런 효과가 없다. 여전히 메모리 성장 – user1173536

0

이 늦게,하지만 난 당신이 경우이 인스턴스에서 curl_close를 사용에 대한 추천, 또는 for 루프 외부에 배치하십시오.

우리는 많은 루프 후에 컬 메모리 누수가 시작된 비슷한 문제가있었습니다. 우리는 curl_multi를 사용하고 각각의 핸들러를 닫음으로써 우리의 기억을 괴롭혔습니다. curl_init로 핸들러를 덮어 쓰는 것만으로는 충분치 않은 것 같습니다. curl_close에 문제가있는 것 같습니다.