Reputation: 115
All the examples in php.net regarding url has demostrated only with http and not with https. I really don't understand why this has been not demonstrated with https. The file_get_contents returning true for a http URL and false for a https URL.
true
return from file_get_contents when a https url being passed into it.Code:
function connectMe() {
$urlHeader = $_REQUEST['urlHeader'];
// if this is a http url it's working for file_get_contents returns true
// if this is a https url it's not working file_get_contents gives false
$status = send($urlHeader);
var_dump($status);
echo $status ? 'success' : 'failed';
exit;
}
function send($url) {
$ctx = stream_context_create(
array(
'http'=>array(
'header'=>"Content-type: application/x-www-form-urlencoded",
'method'=>'POST',
'content'=>NULL
)
)
);
var_dump(stream_get_wrappers());
$w = stream_get_wrappers();
echo 'openssl: ', extension_loaded ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);
return file_get_contents($url, 0, $ctx);
}
Note:
1. The above code has been integrated as per the solution given in stackoverflow where nothing changed in the result.
2. The openssl
is enabled and allow_url_fopen
is on.
OUTPUT that I get:
array(9) { [0]=> string(5) "https" [1]=> string(4) "ftps" [2]=> string(3) "php" [3]=> string(4) "file" [4]=> string(4) "glob" [5]=> string(4) "data" [6]=> string(4) "http" [7]=> string(3) "ftp" [8]=> string(4) "phar" }
openssl: yes http wrapper: yes https wrapper: yes wrappers: array ( 0 => 'https', 1 => 'ftps', 2 => 'php', 3 => 'file', 4 => 'glob', 5 => 'data', 6 => 'http', 7 => 'ftp', 8 => 'phar', )
Warning: file_get_contents(): php_network_getaddresses: gethostbyname failed. errno=0 in FILENAME.PHP on line 40
Warning: file_get_contents(https://someIPhere or website): failed to open stream: php_network_getaddresses: gethostbyname failed. errno=0 in FILENAME.PHP on line 40
bool(false) failed
Upvotes: 2
Views: 3622
Reputation: 652
Chances are that you might be pointing to a self-signed ssl. If so then that might be the reason. Check to make sure the the URL has a valid SSL Certificate.
If you want to bypass the SSL verification then you will need to add a stream_context_create to set 'verify_peer' => false.
see: file_get_contents(): SSL operation failed with code 1 (certificate verify failed)
Upvotes: 0