hay una clase que puede hacer eso, lo hace mediante la direccion ip del vistante, consultando en una base de datos, el metodo es bueno, y funciona pero como todo es tan relativo en la wé no es 100% confiable
te doy la direccion a la clase, se llama NetGeo, te recuerdo que para bajar las clases de este sitio debes estar registrado
http://www.phpclasses.org/browse.html/package/514.html?
saludos