WordPress per defecte enregistra l’adreça IP del proxy de qui envia comentaris, no la real. Les connexions d’alguns proveïdors d’ADSL passen per proxy-cau, cosa que fa que molts comentaris tenguin la mateixa adreça IP. Per canviar aquest detall, basta fer una petita modificació a wp-comments-post.php
.
Cal localitzar la línia $user_ip = $_SERVER['REMOTE_ADDR'];
i comentar-la o esborrar-la. A continuació, heu d’entrar el codi que recollirà l’adreça IP de qui fa el comentari:
if (preg_match('/^(d{1,3}.){3}d{1,3}$/s', $_SERVER["HTTP_CLIENT_IP"])) {
$user_ip = $_SERVER["HTTP_CLIENT_IP"];
} else {
if (preg_match('/^(d{1,3}.){3}d{1,3}$/s', $_SERVER["HTTP_X_FORWARDED_FOR"])) {
$user_ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if (preg_match('/^(d{1,3}.){3}d{1,3}$/s', $_SERVER["REMOTE_HOST"])) {
$user_ip = $_SERVER["REMOTE_HOST"];
} else {
$user_ip = $_SERVER["REMOTE_ADDR"];
}
}
}
En comptes d’usar sempre la variable REMOTE_ADDR
, en primer lloc cerca la IP a HTTP_CLIENT_IP
, després a HTTP_X_FORWARDED_FOR
i finalment a REMOTE_HOST. Es quedarà amb la primera que trobi. HTTP_CLIENT_IP i HTTP_X_FORWARDED_FOR
solen desar la del visitant, però el detall pot canviar en algunes connexions. Ho podeu veure amb la funcio phpinfo()
.
L’expressió regular comprova que es tracta d’una adreça IPv4: una cadena que comença (^) amb 3 seqüències de entre 1 i 3 dígits separades per un punt i que finalitza ($) amb entre 1 i 3 dígits més.
El codi no és cosa meva. L’he trobat a varis webs cercant experiències amb els proxy-cau i les IP —aquí un. Al web de PHP hi ha una discussió sobre com recollir l’adreça IP i més codi vàlid. Tot plegat és fàcil d’entendre i correcte, així que endavant amb els copipastes 🙂