Задать вопрос
@dsslesarev

Как сделать временную ссылку не на скачивание?

Подскажите на что заменить, что бы при создании временной ссылке, и переходе на неё , люди попадали на страничку с плеером, но настоящую ссылку не видели?

<?php

$s_files = "*****"
$file = "get_url.txt";

$check = FALSE;

$hash = $_GET['hash'];

if(strlen($hash) != 32) {
	exit("Не правильныая ссылка");
}

$arr = file($file);

$fd = fopen($file,"w");
if(!$fd) {
	exit("Не возможно открыть файл");
}

if(!flock($fd,LOCK_EX)) {
	exit("Блокировка файла не удалась");
}

for ($i = 0; count($arr) > $i; $i++) {
	
	if($hash == rtrim($arr[$i])) {
		
		$check = TRUE;
	}
	else {
		fwrite($fd,$arr[$i]);
	}
}

if(!flock($fd,LOCK_UN)) {
	exit("Не возможно разблокировать файл");
}
fclose($fd);

if($check) {
	header("Content-Description: File Transfer");
	header("Content-Type: image/jpeg");
	header("Content-Disposition: attachment; filename=".basename($s_file));
	header("Content-Transfer-Encoding:binary");
	
	header("Content-Length: ".filesize($s_file));
	
	ob_clean();
	flush();
	
	readfile($s_file);
	exit();
}
else {
	exit("Не правильная ссылка!!!");
  • Вопрос задан
  • 1298 просмотров
Подписаться 3 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 5
SilenceOfWinter
@SilenceOfWinter Куратор тега PHP
та еще зажигалка...
проблема не в страничке, а в данных которые ты собираешься на ней отображать - надо генерить случайную ссылку на видео, а не на страницу, хотя как по мне занятие бестолковое
Ответ написан
@Karpion
Невозможно утаить ссылку, по которой переходят пользователи/браузеры. Напишите задачу конкретнее - от кого Вы хотите защитить контент.
Ответ написан
solotony
@solotony
покоряю пик Балмера
отдавать статику таким образом (обрабатывая файл в PHP скрипте) нельзя. это самый простой способ положить сервер.

самый простой способ - создавайте новую временную ссылку (link, link -s) на ваш контент.
Ответ написан
Комментировать
@dmtrrr
Backend developer
Комментировать
@granty
Технически, есть 2 варианта:

1. Отдавать скачиваемое на PHP. Для генерации временной ссылки можно использовать:

A) класс NoDirectLinks. Временные ссылки надо складывать в БД и проверять их "валидность" и периодически чистить.

B) делать временную ссылку вида "ID_ValidDate", которую шифровать методом обратимого шифрования. Если периодически менять ключ кодирования (и алгоритм), такую ссылку невозможно взломать и подделать.
Внешне ссылка выглядит как хэш 56af5b4C..., но на сервере её можно декодировать обратно в "ID скачиваемой записи по БД" и "время жизни ссылки". Если время жизни истекло - контент не отдаётся. Вместо ID можно запаковывать и имя файла.

В обоих вариантах делается файл типа get.php, который проверяет "валидность" временной ссылки и отдаёт контент.
В вашем случае это плохо - при медленном интернете у юзера, загрузка видео/аудио будет идти долго, PHP-скрипт будет висеть и жрать ресурсы.


2. Делать временную ссылку средствами операционной системы, например, через symlink() на PHP.
Тогда медиа-файл будет отдаваться веб-сервером без участия PHP, что намного лучше.
Всё-равно придется хранить эти ссылки в БД и решать вопрос их устаревания и чистки.


Но временную ссылку, как уже отметили выше, лучше делать не для страницы, а для самого скачиваемого файла (вам же просто надо чтобы ваши видео не транслировались с вашего хостинга на чужие сайты). Иначе поисковики наиндексируют тонну дублей это страницы. Или придётся закрыть страницу с этими временными URL от индексации.

PS: Я в своё время делал вариант 1 B) для платного скачивания документации - работало неплохо.

PPS: Делать временную ссылку для проигрывания медиа-файлов не есть хорошо. Посмотрите как работают плееры ютуба (и другие, не показывающие реальный файл) - они бьют файл на кусочки и отдают частями. Но, даже в этом случае, стандарт HTML5 позволяет скачать файл целиком тем, кто прошарен :)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы