mi pare ovvio ... 151 != 152
e poi ad ogni modo il tuo controllo per ottenere "libero" non potrà mai funzionare:
substr($_SERVER['REMOTE_ADDR'],0,2) == '151' sarà sempre false perché il tuo substr restituisce solo i primi due numeri dell'IP che sarà dunque SEMPRE diverso da 151.
Altrimenti nel tuo codice dovresti spostare la parte dove apri, scrivi, chiudi il file dopo il if(){}elseif(){}else{} così al posto di scriverla 3 volta la metti una sola.
Oltre a questo devo dire che questo metodo lo trovo meno affidabile di quello che ti han dato in un altra discussione quando ti si diceva di parsare il risultato di gethostbyaddr($_SERVER['REMOTE_ADDR']);