0

我正在尝试获取整个频道的视频源(所有视频数据)并将其存储到我的 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);
    }

}

我得到的错误是:

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

这是我在尝试抓取超过 3000 个视频时遇到的几个错误之一。我的问题是如何在继续执行 printVideoFeed 方法的同时不继续扩大内存使用量。如果有办法让它跳出循环,但如果还有视频,那就重新开始,那就太棒了。我一直在寻找,但是用谷歌搜索这个问题是一件很难的事情(要得到我正在寻找的结果)。

4

1 回答 1

1

您是否尝试过使用迭代而不是递归?我可以想象 PHP 可能会保留函数中声明的变量,尤其是$data,直到函数离开。或者,您可以unset($data);在开始递归之前调用。

另外:你确定你没有无限循环吗?也许你需要在打电话startIndex()之前再打电话getNextFeed()

于 2012-08-12T20:36:38.217 回答