Загрузите видеофайл YouTube прямо на компьютер пользователя через браузер

<?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 сначала загружается в папку сервера localhost, где находится этот файл PHP, используя youtube-dl.exe и затем он выталкивается из этой папки для загрузки в браузер (принудительная загрузка).

Как напрямую начать загрузку в браузер пользователя?

Также файл работает нормально на локальном хосте, но не на удаленном сервере.

0

Решение

Во-первых, вам нужно использовать версию youtube-dl для платформы вашего веб-сервера. youtube-dl.exe это сборка для Windows, в то время как большинство веб-хостингов используют Linux.

Затем используйте passthru PHP функция для запуска youtube-dl с -o - параметр командной строки. Параметры делает 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) интерпретатор Python на веб-сервере 2) чтобы иметь возможность использовать passthru функция 3) подключение к YouTube из скриптов PHP. Все это обычно ограничивается веб-хостингами.

2

Другие решения

Проблема, вероятно, в: shell_exec("youtube-dl.exe $youtubeUrl ")

Во-первых, некоторые хосты отключают shell_exec по соображениям безопасности.

Во-вторых, youtube-dl.exe выглядит так, как будто это сценарий Windows, где ваш удаленный сервер, вероятно, основан на Linux.

1

По вопросам рекламы [email protected]