通过浏览器将YouTube视频文件直接下载到用户的计算机

时间:2015-03-16 10:16:37

标签: php youtube tcp-ip

<?php
$youtubeUrl =  "https://www.youtube.com/watch?v=Ko2JcxecV2E"; 
$content = json_encode ($file = shell_exec("youtube-dl.exe $youtubeUrl "));
$input_string =$content;
$regex_pattern = "/Destination:(.*.mp4)/";
$boolean = preg_match($regex_pattern, $input_string, $matches_out);
$extracted_string=$matches_out[0];

$file =explode(': ',$extracted_string,2)[1];      

// Quick check to verify that the file exists
if( !file_exists($file) ) die("File not found");
// Force the download
header("Content-Disposition: attachment; filename=\"$file\"" );
header("Content-Length: " . filesize($file));
header("Content-Type: application/octet-stream;");
readfile($file);

?>

当我运行此文件时,首先将相应的YouTube视频下载到此PHP文件所在的localhost服务器文件夹,使用youtube-dl.exe然后将其从该文件夹推送到浏览器下载(强制下载)。

如何直接开始下载到用户的浏览器?

该文件在localhost上运行正常但在远程服务器上运行不正确。

2 个答案:

答案 0 :(得分:2)

首先,您需要将youtube-dl版本用于您的网络服务器平台。 youtube-dl.exe是Windows的构建版,而大多数虚拟主机使用Linux。

然后使用passthru PHP函数与-o - command-line parameter一起运行youtube-dl。参数使youtube-dl将下载的视频输出到其标准输出,而passthru将标准输出传递给浏览器。

您还需要在passthru之前输出标题。请注意,在这种情况下您无法知道下载大小。

header("Content-Disposition: attachment; filename=\"...\"" );
header("Content-Type: application/octet-stream");

passthru("youtube-dl -o - $youtubeUrl");

如果您需要视频元数据(如文件名),可以先使用youtube-dl命令行参数运行-j,以获取JSON数据,而无需下载视频。

您还需要1)Web服务器上的Python解释器2)能够使用PHP脚本中的passthru功能3)连接到YouTube。所有这些通常都限制在虚拟主机上。

答案 1 :(得分:1)

麻烦可能在:shell_exec("youtube-dl.exe $youtubeUrl ")

首先,出于安全原因,一些主机禁用shell_exec。

其次,youtube-dl.exe看起来可能是一个Windows脚本,因为你的远程服务器可能是基于Linux的。