使用 Youtube PHP API V3 的官方可断点视频上传导致内存泄漏

问题描述 投票:0回答:1

我尝试使用 API V3 将 PHP 中的大文件上传到 Youtube。 我刚刚复制了官方代码从那里

它非常适合小型上传(<100Mo). But when I try to upload large files, it returns :

    Fatal error: Out of memory (allocated 102760448) (tried to allocate 1048577 
bytes) in /homepages/40/d216486693/htdocs/uploadsys.php on line 143

我使用的代码就在下面,第143行是

$chunk = fread($handle, $chunkSizeBytes);
我的服务器可以允许更多内存,但如果我尝试上传 1GB 大小的文件怎么办? 事实上,主要问题是,如果我在循环期间使用块读取和发送检查内存使用情况,它永远不会减少!

就像如果每个块都保留在内存中一样......我能做什么?尝试取消设置 $chunk 但没有成功

        $snippet = new Google_Service_YouTube_VideoSnippet();
        $filtre1 = array("&apos;","&#39;","'","\'");
        $snippet->setTitle(str_replace("\\","",str_replace($filtre1,"’",$title)));
        $snippet->setDescription("Descr");
        $snippet->setTags(explode(",",$keywords));
        $snippet->setCategoryId($ytcat);
        $status = new Google_Service_YouTube_VideoStatus();
        $status->privacyStatus = "unlisted";

        $video = new Google_Service_YouTube_Video();
        $video->setSnippet($snippet);
        $video->setStatus($status);
        $chunkSizeBytes = 1 * 1024 * 1024;
        $client->setDefer(true);
        $insertRequest = $youtube->videos->insert("status,snippet", $video);
        $media = new Google_Http_MediaFileUpload($client,$insertRequest,'video/*',null,true,$chunkSizeBytes);
        $file_size = filesize($videofile);
        $media->setFileSize($file_size);

        // Read the media file and upload it chunk by chunk.
        $status = false;
        $handle = fopen($videofile, "rb");
        $cc = 0;
        while (!$status && !feof($handle)) {
          //Line 143 below
          $chunk = fread($handle, $chunkSizeBytes);
          $status = $media->nextChunk($chunk);
          $cc++;
        }
        fclose($handle);
php memory-leaks upload youtube-api google-api-php-client
1个回答
1
投票

我们也遇到过同样的问题,并通过减小块大小来解决它。

$chunkSizeBytes = 1 * 1024 * 1024;
的官方代码示例可能会导致服务器停止响应并报告内存问题。 减小块的大小并重试。

© www.soinside.com 2019 - 2024. All rights reserved.