"Niezawodny", jak zawsze, może być trudny.
Jeśli ograniczymy się do IPv4, sprawdzenie adresu "127.0.0.1" zajmie się sprawą localhost, ale sprawdzenie "192.168". jest błędne - działa tylko wtedy, gdy skrypt jest uruchamiany na serwerze, który znajduje się w sieci 192.168, używając 16-bitowej maski podsieci.
Sprawdzanie $ _SERVER ['REMOTE_ADDR'] przeciwko $ _SERVER ['SERVER_ADDR'] byłoby lepszym rozwiązaniem. Nadal nie zajmuje się jednak przypadkiem hosta wieloadresowego (tj. Takiego, który ma kilka adresów IP oprócz 127.0.0.1).
Aby przechwycić wszystkie sprawy należące do tej samej sieci, należy sprawdzić kombinację SERVER_ADDR i maski podsieci przed REMOTE_ADDR, ale maska podsieci nie jest dostępna w $ _SERVER.
BUT Znalazłem funkcję, która ma praktycznie wszystko, co chcesz here. To kilka ekranów w dół i nazywa się clientInSameSubnet. Nie mój kod, ale wygląda dobrze.
Tutaj ograniczasz się do IPv4. W dzisiejszych czasach to nie wystarczy. Powinieneś: a) wygodnie z IPv6 oraz b) zdefiniować listę definicji, co jest "lokalne": tak naprawdę tylko 192.168. *? Co jeśli jesteś w sieci z własnym adresem IP? Lub w ramach sieci 10. *? – glglgl
możliwy duplikat [Jak sprawdzić, czy adres IP jest zewnętrzny czy nie?] (Http://stackoverflow.com/questions/14125735/how-to-know-if-an-ip-is-external- lub-not) – user956584