我尝试使用API V3将PHP中的大文件上传到Youtube。 我刚刚复制了官方代码from there。
它适用于小型上传(<100Mo)。 但是当我尝试上传大文件时,它会返回:
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);
我的服务器可以允许更多内存,但是如果我尝试上传 1 GB大小的文件呢?
实际上,主要的问题是如果我在循环期间使用块读取和检查来检查内存使用情况。发送,它永远不会减少!
就好像每个块都留在记忆中......我该怎么办?试图取消$ chunk但没有成功
$snippet = new Google_Service_YouTube_VideoSnippet();
$filtre1 = array("'","'","'","\'");
$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);
答案 0 :(得分:1)
我们遇到了同样的问题,并通过减少块大小来解决它。 $chunkSizeBytes = 1 * 1024 * 1024;
的官方代码示例可能导致服务器停止响应并报告内存问题。减少块的大小,然后再试一次。