0

チャネル全体のビデオフィード(すべてのビデオデータ)を取得し、現在作業中のアプリケーションで使用するためにMySQLデータベースに保存しようとしています。私はYouTubeAPIの経験が豊富ではありません。私が使用しているコードは次のとおりです。

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本以上の動画を取得しようとしたときに発生する数少ないエラーの1つです。私の質問は、printVideoFeedメソッドを再度実行し続けながら、これがメモリ使用量を拡張し続けないようにするにはどうすればよいかということです。ループから抜け出す方法があるが、まだビデオが残っている場合は再起動すると、すばらしいでしょう。私は探していましたが、グーグルでこの質問をするのはちょっと難しいことです(探している結果を得るために)。

4

1 に答える 1

1

再帰の代わりに反復を使用してみましたか?PHPは、関数が終了するまで、関数で宣言された変数、特にを保持する可能性があると想像できます$dataunset($data);または、再帰を開始する前に電話をかけることもできます。

また、無限ループがないことを確認しますか?たぶんあなたは電話startIndex()する前にもう一度電話する必要がありgetNextFeed()ますか?

于 2012-08-12T20:36:38.217 に答える