Код: Выделить всё
function generate_signed_url($full_url, $play = 0, $ttl = 3600, $secret="SecretKey") {
$parsed = parse_url($full_url);
if (!isset($parsed['scheme']) || !isset($parsed['host']) || !isset($parsed['path'])) {
throw new Exception("Invalid URL: $full_url");
}
$base_url = $parsed['scheme'] . "://" . $parsed['host'];
$file_path = $parsed['path'];
$expire_ts = time() + $ttl;
$data = "path={$file_path}&play={$play}&expire={$expire_ts}";
$sig = hash_hmac('sha256', $data, $secret, true);
$sig_b64 = rtrim(strtr(base64_encode($sig), '+/', '-_'), '=');
$url = $base_url . "/encodeVideo.php?file=" . urlencode($file_path) . "&play={$play}&expire={$expire_ts}&sig={$sig_b64}";
return $url;
}
< /code>
Например, он генерирует этот URL: < /p>
https://dl2.storage.com/stream.php?file=%2FMovies%2FA+Good+Day+to+Die+Hard+2013%2FA.Good.Day.to.Die.Hard.2013.EXTENDED.CUT.1080p.BluRay.SoftSub.KargadanMovie.mkv&play=0&expire=1758233262&sig=U-RGM42CEQw7FNzbQ3JbqeqmXQkLOyeTq0zAxTf5Bfo
< /code>
На моем сервере Windows я настроил правило переписывания с помощью этого шаблона: < /p>
^(?!stream\.php)(?!.*Trailer_)(?!stream/)(.+\.(?:mkv|mp4))$
< /code>
, которые отображают: < /p>
/encodeVideo.php?file=/{R:1}
< /code>
Вот мой encodevideo.php (сокращен для ясности, полный код ниже): < /p>
[list]
[*] Он проверяет истечение срока действия и Sig < /li>
Домены карт для приводов < /li>
Поддерживает запросы на диапазон диапазона (Resume Roads) < /li>
Подробнее здесь: [url]https://stackoverflow.com/questions/79768961/php-signed-video-url-with-hmac-works-initially-but-fails-with-500-error-after-mu[/url]