PHP在浏览器和curl之间调用时的不同行为

6vl6ewon  于 2023-02-07  发布在  PHP
关注(0)|答案(1)|浏览(131)

我有一个奇怪的行为,我希望有人能帮助我。我做了同样的调用一次与浏览器和一次与 curl 。
示例
browser: https://www.myurl.com/index.php?foo=bar
curl: curl https://www.myurl.com/index.php?foo=bar
如果我用浏览器调用url(不管是哪种),那么一切都按预期工作,当我用curl调用url时我的内存溢出。
代码片段:

private function doSomething()
{
    $this->doSomeLog('Start process');
    foreach ($foo as $bar) {
        $this->doLogMemory('Memory usage: ' . memory_get_usage());
        $this->callMethodA();
        $this->callMethodB();
        // some more code
    }
}

// Output browser (memory stays at the same level):
>Start process
>Memory usage: 25384948
>Memory usage: 25386731
>Memory usage: 25396326
>Memory usage: 25396326

// Output curl (memory grows steadily):
>Start process
>Memory usage: 25384948
>Memory usage: 162495865
>Memory usage: 236915437
>Memory usage: 426158496

有没有人知道为什么会这样,以及如何避免/修复它?

isr3a4wc

isr3a4wc1#

对多个请求重复使用curl句柄会泄漏内存。每个请求大约会泄漏100字节。当使用同一个句柄发出大量请求时,这是一个问题。Libcurl文档指出,为了重复使用连接,应尽可能重复使用句柄。此错误发生在Windows XP/IIS和Apache/FreeBSD 6.2上

相关问题