Dans un projet ThinkPHP, un appel serveur à https://my.ipin.io/info vérifie l’IP sortante utilisée par le serveur lorsqu’il accède à Internet. Ce cas sert au diagnostic, aux contrôles proxy et à la confirmation de région cloud.
Objectif de conception
Pour « Vérifier l’IP sortante du serveur dans ThinkPHP », la page doit rester utile avant la fin de la requête IP. Le résultat géographique n’est qu’un enrichissement : il est validé, limité à une décision précise et ignoré si les données sont incomplètes.
Flux de requête et de décision
Vérifier l’IP sortante du serveur dans ThinkPHP: Le flux ci-dessous est propre à cette implémentation et ne reprend pas une liste générique de contrôle IP.
- Étape 1 — État par défaut:
OutboundIpService(endpoint) - Étape 2 — Requête:
connect=1.2s; total=3s - Étape 3 — Validation:
ip + country validation - Étape 4 — Décision:
Cache::set(..., 300) - Étape 5 — Repli:
Log::warning context
Exemple orienté production
Vérifier l’IP sortante du serveur dans ThinkPHP: L’exemple ajoute un délai maximal, la validation de la réponse, un repli déterministe et une gestion adaptée au cycle de vie du 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);
}
}
}
Matrice de tests
Avant de publier « Vérifier l’IP sortante du serveur dans ThinkPHP », exécutez ces cas avec des réponses simulées ou une sortie VPN contrôlée.
| Condition | Entrée / configuration | Résultat attendu |
|---|---|---|
| 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 |
Test automatisé / 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']);
}
Gestion des échecs
Vérifier l’IP sortante du serveur dans ThinkPHP: Une erreur doit être visible dans les journaux ou les outils de développement, sans laisser un bloc vide ni casser le paiement.
| Échec | Cause | Réponse |
|---|---|---|
| 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 |
Cas pratique
Un usage réaliste de « Vérifier l’IP sortante du serveur dans ThinkPHP » : après le passage d’un serveur API derrière un nouveau proxy, l’équipe d’exploitation compare l’IP sortante avec la liste blanche d’un partenaire et conserve la dernière valeur valide.
Notes de mise en production
Vérifier l’IP sortante du serveur dans ThinkPHP: Conservez un HTML par défaut complet. La localisation IP ne prouve pas l’identité et ne doit pas servir de contrôle d’autorisation côté client.
Conclusion
« Vérifier l’IP sortante du serveur dans ThinkPHP » dispose désormais de son propre parcours d’implémentation, de tests concrets et d’un comportement de repli défini.