Php 使用YouTube API抓取超过1000个结果的数据,而不使用最大内存

Php 使用YouTube API抓取超过1000个结果的数据,而不使用最大内存,php,youtube-api,Php,Youtube Api,我试图获取整个频道的视频提要(所有视频数据),并将其存储到我的MySQL数据库中,以便在我目前正在开发的应用程序中使用。我对YouTube API不是最有经验的。我使用的代码如下所示: public function printVideoFeed($count) { $this->startIndex($count); $data = $this->yt->getVideoFeed($this->query); foreach($data as

我试图获取整个频道的视频提要(所有视频数据),并将其存储到我的MySQL数据库中,以便在我目前正在开发的应用程序中使用。我对YouTube API不是最有经验的。我使用的代码如下所示:

public function printVideoFeed($count)
{
    $this->startIndex($count);
    $data = $this->yt->getVideoFeed($this->query);

    foreach($data as $video)
    {
        echo $count .' - '.$video->getVideoTitle().'<br/>';
        $count++;
    }

    //check if there are more videos
    try{
        $nextFeed = $data->getNextFeed();
    } catch(Zend_Gdata_App_Exception $e)
    {
        echo $e->getMessage(). '<br/>';
    }

    if($nextFeed)
    {
        $this->printVideoFeed($count);
    }

}

这是我在试图抓取3000多个视频时遇到的几个错误之一。我的问题是,在继续执行printVideoFeed方法的同时,如何使其不继续扩展内存使用。如果有一种方法可以让它脱离循环,但如果仍然有视频留下,就重新启动,这将是非常棒的。我一直在寻找,但对谷歌来说,这个问题是一件很难做到的事情(要得到我想要的结果)。

你试过用迭代代替递归吗?我可以想象,PHP可能会保留函数中声明的变量,尤其是
$data
,直到函数离开。或者,您可以调用
unset($data)操作


另外:您确定没有无限循环吗?在调用
getNextFeed()
之前,您可能需要再次调用
startIndex()

啊,这是个好主意,我来试试。。。有时我倾向于忽视显而易见的事情。
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 36 bytes) in C:\Program Files\ZendFrameworkCli\library\Zend\Gdata\App\Base.php on line 431