【问题标题】:Download the YouTube video file directly to user's computer through browser通过浏览器将 YouTube 视频文件直接下载到用户的计算机
【发布时间】:2015-05-18 10:01:52
【问题描述】:
<?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-dl.exe 将相应的 YouTube 视频下载到此 PHP 文件所在的 localhost 服务器文件夹,然后将其从该文件夹推送到浏览器下载(强制下载)。

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

此外,该文件在本地主机上运行良好,但在远程服务器上却没有。

【问题讨论】:

  • 问题是什么?你想让 PHP 代码在youtube-dl.exe 开始下载文件时立即开始将文件流式传输到浏览器,而无需等待下载完成?
  • 是的......但不是流媒体。下载应该在浏览器而不是流媒体中开始
  • 一个问题,您接受了 Martin Prikryl 的回答,这对我也有用,但是您如何在客户端创建一个 mp4 文件?

标签: php youtube tcp-ip


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

【解决方案2】:

问题可能出在:shell_exec("youtube-dl.exe $youtubeUrl ")

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

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

【讨论】:

    猜你喜欢
    • 2022-06-25
    • 1970-01-01
    • 2012-07-03
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多