En un proyecto ThinkPHP, una solicitud del servidor a https://my.ipin.io/info comprueba la IP de salida usada al acceder a Internet. Este caso sirve para diagnóstico, revisión de proxies y confirmación de región cloud.
Objetivo de diseño
En «Comprobar la IP de salida del servidor en ThinkPHP», la página debe seguir siendo útil antes de que termine la solicitud IP. El resultado geográfico es una mejora: se valida, se aplica a una decisión limitada y se descarta cuando faltan datos.
Flujo de solicitud y decisión
Comprobar la IP de salida del servidor en ThinkPHP: El flujo siguiente pertenece a esta implementación concreta y no reutiliza una lista genérica de consulta IP.
- Paso 1 — Estado predeterminado:
OutboundIpService(endpoint) - Paso 2 — Solicitud:
connect=1.2s; total=3s - Paso 3 — Validación:
ip + country validation - Paso 4 — Decisión:
Cache::set(..., 300) - Paso 5 — Reserva:
Log::warning context
Ejemplo orientado a producción
Comprobar la IP de salida del servidor en ThinkPHP: El ejemplo incorpora tiempo de espera, validación de respuesta, un valor de reserva determinista y manejo específico del ciclo de vida del framework.
<?php
namespace app\service;
use think\facade\Cache;
use think\facade\Log;
final class OutboundIpService
{
public function __construct(
private string $endpoint = 'https://my.ipin.io/info'
) {}
public function lookup(): array
{
$fallback = Cache::get('ipin:last_good', [
'ip' => 'Unknown', 'country' => 'ZZ',
'region' => '', 'city' => '', 'source' => 'fallback'
]);
$started = microtime(true);
$ch = curl_init($this->endpoint);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT_MS => 1200,
CURLOPT_TIMEOUT_MS => 3000,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HTTPHEADER => ['Accept: application/json'],
CURLOPT_USERAGENT => 'ipin-outbound-check/1.0',
]);
try {
$body = curl_exec($ch);
if ($body === false) {
throw new \RuntimeException('cURL: '.curl_error($ch));
}
$status = (int) curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
if ($status !== 200) {
throw new \RuntimeException('HTTP '.$status);
}
$data = json_decode($body, true, 32, JSON_THROW_ON_ERROR);
$ip = filter_var($data['ip'] ?? '', FILTER_VALIDATE_IP,
FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);
$country = strtoupper((string) ($data['country'] ?? ''));
if (!$ip || !preg_match('/^[A-Z]{2}$/', $country)) {
throw new \UnexpectedValueException('Invalid IP payload');
}
$result = [
'ip' => $ip, 'country' => $country,
'region' => (string) ($data['region'] ?? ''),
'city' => (string) ($data['city'] ?? ''),
'source' => 'live',
];
Cache::set('ipin:last_good', $result, 300);
return $result;
} catch (\Throwable $e) {
Log::warning('Outbound IP lookup failed', [
'message' => $e->getMessage(),
'duration_ms' => (int) ((microtime(true) - $started) * 1000),
]);
return $fallback;
} finally {
curl_close($ch);
}
}
}
Matriz de pruebas
Antes de publicar «Comprobar la IP de salida del servidor en ThinkPHP», ejecute estos casos con respuestas simuladas o una salida VPN controlada.
| Condición | Entrada / configuración | Resultado esperado |
|---|---|---|
| T1 | HTTP 200; ip=203.0.113.10; country=JP | source=live; Cache TTL=300 |
| T2 | egress IP A → B | new value after TTL |
| T3 | cURL error=28 | source=fallback; Log::warning |
| T4 | private IP / country=null | reject; cache unchanged |
Prueba automatizada / smoke test
public function test_rejects_incomplete_payload(): void
{
$service = new OutboundIpService('http://127.0.0.1:9081/missing-country');
$result = $service->lookup();
$this->assertSame('fallback', $result['source']);
}
Gestión de fallos
Comprobar la IP de salida del servidor en ThinkPHP: Los fallos deben verse en registros o herramientas de desarrollo, pero nunca dejar un bloque vacío ni romper el proceso de pago.
| Fallo | Causa | Respuesta |
|---|---|---|
| cURL 6 / 60 | DNS / CA | Cache:last_good + Log |
| HTTP 429 / 5xx | remote API | short cache; no request loop |
| allow_url_fopen=0 | file_get_contents | cURL |
| proxy IP mismatch | egress route | proxy/container network check |
Caso práctico
Un uso realista de «Comprobar la IP de salida del servidor en ThinkPHP»: después de mover un servidor API detrás de un nuevo proxy, operaciones compara la IP de salida con la lista permitida de un proveedor y conserva el último valor válido.
Notas de producción
Comprobar la IP de salida del servidor en ThinkPHP: Mantenga completo el HTML predeterminado. La ubicación IP no demuestra identidad y el resultado del navegador no debe controlar permisos.
Conclusión
«Comprobar la IP de salida del servidor en ThinkPHP» ahora tiene una ruta de implementación, pruebas y comportamiento de reserva propios, en lugar de una plantilla compartida.