Those are two different things.
REMOTE_ADDR is an IP address, taken from the TCP/IP stack for this incoming connection (i.e. no extra work involved).
REMOTE_HOST is the result of your server issuing a reverse-DNS lookup request to the DNS system (which may be local to your host, or not) and getting the hostname to which that requesting IP address belongs. This requires the server (and the client) to wait while the DNS request is sent and serviced, and the response is sent back.
In some cases, reverse-DNS lookups are not supported on a server, in which case REMOTE_HOST will return the original IP address unchanged.
Another thing to avoid is unnecessary file- and directory-exists checks, as in the unconditional, wasteful, and all-too-common code sequence: