使用PHP CURL下载MP4文件

使用PHP CURL下载MP4文件,php,curl,video,mp4,Php,Curl,Video,Mp4,我正在尝试将视频从一台服务器下载到另一台服务器。我使用CURL是因为copy()没有从视频下载音频。但是,CURL下载了损坏的文件(?),并且没有。这就是我现在下载MP4文件的方式: $source = "https://link.com/video.mp4"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $source); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($c

我正在尝试将视频从一台服务器下载到另一台服务器。我使用CURL是因为copy()没有从视频下载音频。但是,CURL下载了损坏的文件(?),并且没有。这就是我现在下载MP4文件的方式:

$source = "https://link.com/video.mp4";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$data = curl_exec ($ch);
$error = curl_error($ch);
curl_close ($ch);

$destination = "video/video.mp4";
$file = fopen($destination, "wb");
fwrite($file, $data);
fclose($file);
有什么特别的MP4文件可以正确下载吗


array(26){[“url”]=>string(60)”https://link.com/video.mp4“[“内容类型”]=>NULL[“http代码”]=>int(0)[“标题大小”]=>int(0)[“请求大小”]=>int(0)[“文件时间”]=>int(-1)[“ssl验证结果”]=>int(1)[“重定向计数”]=>int(0)[“总时间”]=>float(0.135745)[“名称查找时间”]=>float(8.4E-5)[“连接时间”]=>float”(0.056009)[“预传输时间”]=>float(0)[“大小上传”]=>float(0)[“大小下载”]=>float(0)[“速度下载”]=>float(0)[“速度上传”]=>float(0)[“下载内容长度”]=>float(-1)[“上传内容长度”]=>float(-1)[“开始传输时间”]=>float(0)[“重定向时间”]=>float(0)[>float(0)[>float(0)[>float)[>float(0)[]=>string(13)“AN-IP:D”[“certinfo”]=>array(0){}[“primary_-port”]=>int(443)[“local_-IP”]=>string(11)“192.168.0.9”[“local_-port”]=>int(57478)}

必须以二进制模式打开文件,以确保文件正确保存到磁盘

$file = fopen($destination, "wb");
也可以使用
fwrite
代替FPUT

fwrite($file, $data);
检查
video.mp4
是否从浏览器正确下载。可能是重定向?如果是,请添加此选项

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
如果仍然不起作用,则将此信息转储并发布

var_dump(curl_getinfo($ch));

还是一样。这是我在尝试打开视频时得到的结果:
QuickTime Player无法打开“video.mp4”.
并且它说它有0字节。我将用我所拥有的更新我的问题。它所做的事情与前面的一样。ID问题:您是否有适当的权限让Apache用户写入指定的$destination目录?@GeorgeQ我用我得到的更新了我的问题。
curl\u setopt($ch,CURLOPT\u FOLLOWLOCATION,1);
没有work@JacquesAmar我对该文件夹拥有755权限。编辑:仅使用777进行了尝试,但仍然没有任何结果。您没有真正检查传输是否成功执行,您可以调用
curl\u error()
,但您没有检查该函数返回的值(您也可以使用)。完美的代码片段,非常有效,谢谢。