Я играю аудио в формате mp3 и видео в формате mp4, но хочу скрыть URL-адрес с помощью PHP. Я следовал за этим PHP: как я могу заблокировать прямой URL-доступ к файлу, но при этом разрешить егоскачал вошедшие в систему пользователи? .
HTML-код
<audio controls>
<source src="get_song.php?name=my-song-name" type="audio/mpeg">
Your browser does not support the audio element.
</audio>
<video controls>
<source src="get_video.php?name=my-video-name" type="video/mp4">
Your browser does not support the video element.
</video>
PHP
get_song.php
if( !empty( $_GET['name'] ) )
{
// check if user is logged
if( is_logged() )
{
$song_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
$song_file = "
{$_SERVER['DOCUMENT_ROOT']}/members/files/{$song_name}.mp3";
if( file_exists( $song_file ) )
{
header( 'Cache-Control: public' );
header( 'Content-Description: File Transfer' );
header( "Content-Disposition: attachment; filename={$song_file}" );
header( 'Content-Type: application/mp3' );
header( 'Content-Transfer-Encoding: binary' );
readfile( $song_file );
exit;
}
}
}
die( "ERROR: invalid song or you don't have permissions to download it." );
get_video.php
if( !empty( $_GET['name'] ) )
{
// check if user is logged
if( is_logged() )
{
$video_name = preg_replace( '#[^-\w]#', '', $_GET['name'] );
$video_file = "
{$_SERVER['DOCUMENT_ROOT']}/members/files/{$video_name}.mp4";
if( file_exists( $song_file ) )
{
header( 'Cache-Control: public' );
header( 'Content-Description: File Transfer' );
header( "Content-Disposition: attachment; filename={$video_file}" );
header( 'Content-Type: application/mp4' );
header( 'Content-Transfer-Encoding: binary' );
readfile( $video_file );
exit;
}
}
}
die( "ERROR: invalid song or you don't have permissions to download it." );
Нопроблема в том, что аудио занимает много времени для потоковой передачи, обрезается посередине и возвращается назад с самого начала.Также видео не загружается на мобильный.Что-то не так с заголовками?какие правильные заголовки для этого?
Я нашел другое решение здесь, но видео все еще не загружается, и звук возвращается назад. Скрыть аудио-URL в PHP :
$filename = '/path/to/audio.mp3';
if(is_file($filename))
{
header('Content-Type: audio/mpeg');
header('Content-Disposition:
inline;filename="'.basename($filename).'"');
header('Content-length: '.filesize($filename));
header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: chunked");
readfile($filename);
}
$videoname = '/path/to/video.mp4';
if(is_file($videoname))
{
header('Content-Type: video/mp4');
header('Content-Disposition:
inline;filename="'.basename($videoname).'"');
header('Content-length: '.filesize($videoname));
header('Cache-Control: no-cache');
header("Content-Transfer-Encoding: chunked");
readfile($videoname);
}
В чем разница между кодировкой передачи контента Chunked и Binary?Каковы правильные заголовки для аудио и видео?