5

メモリが指数関数的に増加する cURL を使用するループでこの問題が発生します。このサンプル スクリプトでは、約 14MB のメモリを使用して開始し、28MB で終了します。元のスクリプトを使用して 1.000.000 まで繰り返すと、メモリが 800MB に増加します。これは悪いことです。

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);
}
4

3 に答える 3

4

メモリリークの修正を見つけたと思います。PHPスクリプトでcurllibを使用しても同じ問題が発生します。curl_exec()関数を繰り返し呼び出すと、メモリが使い果たされます。

PHPのバグレポートによると、このメモリリークは、次のコードのように、閉じた後にCurlハンドラーの設定を解除することで修正される可能性があります。

...
curl_close($ch);
unset($ch);
于 2012-08-15T14:27:51.307 に答える
1

これは遅いですが、このインスタンスで curl_close を使用しないことをお勧めします。使用する場合は、for ループの外に配置することをお勧めします。

多くのループの後に curl メモリがリークし始めるという同様の問題がありました。curl_multi を使用し、個々のハンドラーをそれぞれ閉じていたため、メモリがめちゃくちゃになりました。ハンドラーを curl_init で上書きするだけで十分なようです。curl_close に問題があるようです。

于 2013-04-04T00:41:04.490 に答える
0

1つの解決策は、curlを少なく(たとえば100回)呼び出してからページを更新することです。これにより、メモリを解放できる場合があります。

于 2012-08-15T14:19:16.420 に答える