我正在使用 PHP 通过直接上传将视频发送到 Youtube。它适用于较小尺寸的视频,但在尝试发送 390 MB 视频时,我收到以下错误:
PHP致命错误:内存不足(分配3932160)(试图分配390201902字节)
我试过增加memory_limit
,但这没有帮助。
if ($isFile) {
ini_set('memory_limit', '2G')
$data = file_get_contents($data);
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$out = curl_exec($ch);
curl_close($ch);
return $out;
我也尝试过 curl ,exec()
但后来发生了更奇怪的事情:
curl http://uploads.gdata.youtube.com/feeds/api/users/default/uploads -H 'POST /feeds/api/users/default/uploads HTTP/1.1' -H '主机:uploads.gdata.youtube .com' -H '授权:OAuth [snip oauth info]"' -H 'GData-Version: 2' -H 'X-GData-Client: www.mywebsite.com' -H 'X-GData-Key: key =[snip]' -H 'Slug:video.AVI' -H '内容类型:多部分/相关;边界 =“iUI5C0hzisAHkx9SvaRJ”' -H '内容长度:390193710' -H '连接:关闭' -d / tmp/youtube.xml
/tmp/youtube.xml 是我保存要上传的数据文件的位置。也许这种用法是错误的?
这将需要大约 6 分钟,所以看起来文件正在发送,但随后我得到一个空回复:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
...
0 0 0 0 0 0 0 0 --:--:-- 0:06:00 --:--:-- 0
curl: (52) Empty reply from server
编辑:
我正在使用 OAuth,所以我不能为此使用普通的 PHP API 库。我必须上传一个包含在 XML 文件中的视频二进制数据的 XML 文件,如此处所述
我发现另一个有同样问题的人提供了代码来分块读取和发送文件。但是,当尝试此方法时,Youtube 会返回一个 411 页面,说明需要“Content-Length”标头。我正在设置内容长度标头,所以这可能是一个错误。此方法使用fsockopen()
函数而不是 cURL。[实际上,再次查看代码,我意识到我只是用“\n”而不是“\r\n”分隔标题。这可能是问题所在。我也会尝试回车]
编辑2:
我认为“\r\n”有效,但现在有了代码,我再次收到来自 Youtube 的空回复。
那里有任何 Curl 专家可以帮助我完成这项工作吗?我完全被这个难住了。