function signUrl($url, $securityKey, $expirationTime = 3600, $userIp = '', $pathAllowed = '', $countriesAllowed = '', $countriesBlocked = '') {
$expires = time() + $expirationTime;
$parsedUrl = parse_url($url);
$parameters = [];
if (!empty($parsedUrl['query'])) {
parse_str($parsedUrl['query'], $parameters);
}
$signaturePath = !empty($pathAllowed) ? $pathAllowed : $parsedUrl['path'];
if (!empty($pathAllowed)) $parameters['token_path'] = $signaturePath;
if (!empty($countriesAllowed)) $parameters['token_countries'] = $countriesAllowed;
if (!empty($countriesBlocked)) $parameters['token_countries_blocked'] = $countriesBlocked;
ksort($parameters);
$parameterString = '';
foreach ($parameters as $key => $value) {
if ($key !== 'token' && $key !== 'expires') {
$parameterString .= '&' . $key . '=' . $value;
}
}
$parameterString = ltrim($parameterString, '&');
$hashableBase = $securityKey . $signaturePath . $expires . $userIp . $parameterString;
$token = hash('sha256', $hashableBase, true);
$token = base64_encode($token);
$token = strtr($token, '+/', '-_');
$token = rtrim($token, '=');
$parameters['token'] = $token;
$parameters['expires'] = $expires;
return $parsedUrl['scheme'] . '://' . $parsedUrl['host'] . $parsedUrl['path'] . '?' . http_build_query($parameters);
}
// Directory token for video streaming
$url = signUrl(
'https://myzone.b-cdn.net/videos/stream1/playlist.m3u8',
'your_security_key',
3600,
'',
'/videos/stream1/'
);