2012-08-15 87 views
5

我有一個使用cURL循環的問題,內存以指數級增長。在這個示例腳本中,它開始使用大約14MB的內存並以28MB結束,使用我的原始腳本並重復到1.000.000,內存增長到800MB,這是不好的。cURL循環內存增長

PHP 5.4.5
捲曲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 – 2012-08-15 14:21:35

+0

我嘗試curl_multi,這是同樣的問題,即使它更慢。 – user1173536 2012-08-16 07:30:41

回答

0

一個解決辦法是打電話捲曲少(比如100次),然後刷新頁面,這可以允許內存被釋放。

4

我想我找到了內存泄漏的修復。我在PHP腳本中使用curl lib時遇到了同樣的問題。重複調用curl_exec()函數後,內存變得耗盡。

根據PHP bug report此內存泄漏可以是固定的關閉它,就像下面的代碼後取消設置捲曲處理程序:

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

謝謝,但這是在我的代碼中,並沒有效果。記憶仍在增長 – user1173536 2012-08-16 05:05:18

0

這是晚了,但我建議不要在這種情況下使用curl_close,或者如果你那麼,把它放在for循環之外。

我們有一個類似的問題,在多次循環之後,捲曲內存開始泄漏。我們正在使用curl_multi並關閉每個單獨的處理程序,這導致我們的內存崩潰。用curl_init覆蓋處理程序似乎綽綽有餘。似乎curl_close有問題。