PHP : file_get_contents($loc) fails
Name or service not known
DNS is broke. Can you ping data.mysite.com
from a shell on the machine (assuming you have one)?
Try replacing data.mysite.com
with a fixed IP address for now.
PHP file_get_contents does not work on localhost
From the documentation for file_get_contents
:
A URL can be used as a filename with this function if the fopen wrappers have been enabled. See fopen() for more details on how to specify the filename. See the Supported Protocols and Wrappers for links to information about what abilities the various wrappers have, notes on their usage, and information on any predefined variables they may provide.
Check in your php.ini
so allow_url_fopen
is set to on
.
EDIT:
I didn't noticed that you actually could use file_get_contents
locally, so now I'm thinking that this could have something to do with your firewall settings
.
Also, try to set the user_agent
in your php.ini
if not already done.
PHP: file_get_contents() gives me Name or service not known
I hate to say this, but the problem solved itself; I just upgraded the Debian packages (apt-get upgrade
) and the problem went away. Frustrating to not know the cause, though.
Thank you all for your time!
Issue with file_get_contents encoding
What you have there is UTF-16LE in which each codepoint is encoded as at least two bytes, even "basic ASCII". The first two bytes of the document are the Byte Order Mark [BOM] that declares in what byte-order [endian] those codepoints are encoded
$input = "\xff\xfe{\x00}\x00"; // UTF-16-LE with BOM
function convert_utf16($input, $charset=NULL) {
// if your data has no BOM you must explicitly define the charset.
if( is_null($charset) ) {
$bom = substr($input, 0, 2);
switch($bom) {
case "\xff\xfe":
$charset = "UTF-16LE";
break;
case "\xfe\xff":
$charset = "UTF-16BE";
break;
default:
throw new \Exception("No encoding specified, and no BOM detected");
break;
}
$input = substr($input, 2);
}
return mb_convert_encoding($input, "UTF-8", $charset);
}
$output = convert_utf16($input);
var_dump(
$output,
bin2hex($output),
json_decode($output, true)
);
Output:
string(2) "{}"
string(4) "7b7d"
array(0) {
}
It's also worth noting that using anything other than UTF-8 to encode JSON makes it invalid JSON, and you should tell whoever is giving you this data to fix their app.
ipinfo.io via PHP's file_get_contents() and cURL fail
I run http://ipinfo.io, and we don't block access to any IPs (we do rate limit requests from IPs, but that'd result in a HTTP status code, not a blocked connection). This sounds like a config issue with your server to me. Some hosts lock down file_get_contents
so it can't open URLs, or might have blocked http://ipinfo.io. Are few ways to track this down:
1) Can you open another URL with file_get_contents
? Eg. what happens when you file_get_contents('http://google.com')
. If you get a permission denied error there then you should speak to your hosting provider
2) Does command line curl
work for ipinfo.io? The -i -v
flags should give you more information about what's going on here. Here's what a successful request looks like:
$ curl -iv ipinfo.io
* Rebuilt URL to: ipinfo.io/
* Trying 54.68.119.255...
* Connected to ipinfo.io (54.68.119.255) port 80 (#0)
> GET / HTTP/1.1
> Host: ipinfo.io
> User-Agent: curl/7.49.1
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Access-Control-Allow-Origin: *
Access-Control-Allow-Origin: *
< Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8
< Date: Sun, 15 Jan 2017 18:38:44 GMT
Date: Sun, 15 Jan 2017 18:38:44 GMT
< Server: nginx/1.8.1
Server: nginx/1.8.1
< Set-Cookie: first_referrer=; Path=/
Set-Cookie: first_referrer=; Path=/
< X-Content-Type-Options: nosniff
X-Content-Type-Options: nosniff
< Content-Length: 252
Content-Length: 252
< Connection: keep-alive
Connection: keep-alive
<
{
"ip": "24.6.61.239",
"hostname": "c-24-6-61-239.hsd1.ca.comcast.net",
"city": "Mountain View",
"region": "California",
"country": "US",
"loc": "37.3845,-122.0881",
"org": "AS7922 Comcast Cable Communications, LLC",
"postal": "94040"
* Connection #0 to host ipinfo.io left intact
}
Related Topics
Woocommerce: Change HTML Structure of Billing Fields in Checkout
Converting to Date in PHP from Yyyymmdd Format
Using PHP Code in Smarty Tpl File
PHP Session Id Changing on Every Request
Can PHP Read Text from a Powerpoint File
Woocommerce - Overriding Billing State and Post Code on Existing Checkout Fields
PHP Error: Notice: Undefined Index:
PHP Email - How to Avoid Mail Ending Up in Spam Box
Php: Populating an Array with the Names of the Next 12 Months
What Is the Fastest Way to Find the Occurrence of a String in Another String
Fatal Error: Unsupported Operand Types
PHP Mail Function: Legitimate Mails Marked as Spam by Gmail and Hotmail
How to Get Results from the Wikipedia API with PHP
Single Result from Sum with MySQLi
Rewrite All Queries to Not Need the .PHP Extension Using a Mod_Rewrite Rewriterule