Aki próbálta már CRON-ból (szerver időzített feladatból) meghívni a $_SERVER["SERVER_ADDR"] változót, az tapasztalhatta, hogy a rendszer „Undefined index: SERVER_ADDR in ...” hibaüzenetet generál és nem adja vissza a változó értékét. Stabil szerver esetén ezt ki lehet váltani a konkrét IP-cím megadásával, ám ha ezt a változót valamiféle ellenőrzésre szeretnénk használni és időközben megváltozik az IP-cím, akkor abból csak gondok lehetnek.
Az alábbi két kis scripttel kiküszöbölhető a probléma.
Az első kis részletet egy olyan php-scriptbe kell beépíteni, ami elég nagy rendszerességgel lefut:
$MserIp=ROOT."TRASH_orankent/MyServerIp";//szerver ip..... if (!file_exists($MserIp)){ $attm=ROOT."TRASH_orankent/atmip_".time().rand(1000,9999); $hidip=fopen($attm,"w");if ($hidip){ fwrite($hidip,$_SERVER["SERVER_ADDR"]); fclose($hidip); if (file_exists($attm)){ if (filesize($attm)>0){ rename($attm,$MserIp); } } } }
A fenti programrészben a ROOT egy előre definiált (gyökér)könyvtár, a „TRASH_orankenti” pedig valamilyen olyan könyvtár címe, amit bizonyos időközönként teljesen töröl a rendszer (akár saját CRON scripttel)
A másik rövid scriptet abba a CRON által meghívott scriptbe kell beépíteni, amelynél fel akarjuk használni a $_SERVER["SERVER_ADDR"] változót:
function makemeServerAddress() { // a MyServerIp file tartalmazza a szerver ip címét, amit időközönként // töröl a rendszer, majd az első index.php hívásnál egy kis script az // initben a fenti szerint újragenerálja, ami hiányzik. $MserIp=ROOT."TRASH_orankent/MyServerIp"; $hon=fopen($MserIp,"r"); $a=""; if ($hon){$a=fread($hon,filesize($MserIp));} return $a; } Meghívás: $SajatSzerverIP=makemeServerAddress();