9
votes

I am using the following API for getting the country code using IP

http://api.hostip.info/country.php?ip=' . $IP

Example: on Localhost

$IP = '202.71.158.30';

//pass the ip as a parameter for follow URL it will return the country

$country_code = file_get_contents('http://api.hostip.info/country.php?ip=' . $IP);

and its working fine here and showing the country code.

But it showing error on Server

Example:

$IP=$_SERVER['REMOTE_ADDR'];

$country_code = file_get_contents('http://api.hostip.info/country.php?ip=' . $IP);

Showing following error:

Warning: file_get_contents(http://api.hostip.info/country.php?ip=101.63.xx.xxx) [function.file-get-contents]: failed to open stream: Connection refused in /srv/disk4/1322145/www/servername.in/app/header.php on line 12

Whats wrong with this?

3
Probably this has little to do with PHP and more with network restrictions. Try dumping $http_response_header after file_get_contents to get more info about why it failed. - marekful
Make sure that you can open a url with fopen. See: php.net/… - Robert K
@MarcellFülöp : But its working on localhost only the error showing on server. So is it the issue of $_SERVER['REMOTE_ADDR']; ? - J.K.A.
@MarcellFülöp : var_dump($country_code); showing bool(false) - J.K.A.
I meant $http_response_header. This variable gets populated by PHP when file_get_contents is used with the HTTP wrapper and might give useful information about the HTTP request. - marekful

3 Answers

11
votes

You can use CURL in place of file_get_contents()

<?php
    $IP = '202.71.158.30'; 
    $runfile = 'http://api.hostip.info/country.php?ip=' . $IP;

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $runfile);

    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);

    $content = curl_exec ($ch);

    curl_close ($ch); 

    echo $content;
2
votes

Some servers do not permit accessing through IP address in your request. You can use CURL to prevent this problem.

1
votes

In my case the Fail2Ban extension in Plesk suddenly started IP-blocking the server that did the file_get_contents() requests. This is probably not going to be the issue, but I just wanted you to be aware of such a possibility.