Все примеры в php.net относительно URL продемонстрированы только с http, а не с https. Я действительно не понимаю, почему это не было продемонстрировано с https. File_get_contents возвращает true для URL-адреса http и false для URL-адреса https.
- Нужно ли что-то включать на сервере, где выполняется эта функция?
- Я знаю, что это логическая ошибка, но эта логическая ошибка происходит во встроенной функции. У меня нет синтаксической ошибки. Что мне здесь не хватает?
- Мой ожидаемый результат состоит в том, чтобы получить
true
возврат из file_get_contents, когда в него передается URL-адрес https.
Код:
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);
}
Примечание. 1. Приведенный выше код был интегрирован в соответствии с решением, приведенным в stackoverflow, где ничего не изменилось в результате. 2. openssl
включен, а allow_url_fopen
включен.
ВЫВОД, который я получаю:
массив(9) { [0]=> строка(5) "https" [1]=> строка(4) "ftps" [2]=> строка(3) "php" [3]=> строка(4) "файл" [4]=> строка(4) "glob" [5]=> строка(4) "данные" [6]=> строка(4) "http" [7]=> строка(3) "ftp " [8]=> строка(4) "фар" }
openssl: да HTTP-оболочка: да https-оболочка: да оболочки: массив ( 0 => 'https', 1 => 'ftps', 2 => 'php', 3 => 'файл', 4 => 'glob', 5 => 'данные', 6 => 'http', 7 => 'ftp', 8 => 'phar', )
Предупреждение: file_get_contents(): php_network_getaddresses: gethostbyname не удалось. errno=0 в FILENAME.PHP в строке 40
Предупреждение: file_get_contents(https://someIPhere или веб-сайт): не удалось открыть поток: php_network_getaddresses: ошибка gethostbyname. errno=0 в FILENAME.PHP в строке 40
bool(false) не удалось
$_REQUEST('urlHeader');
правильно?$_REQUEST
не является функцией - person apokryfos   schedule 12.10.2017extension=php_openssl.dll allow_url_fopen = On
- person teeyo   schedule 12.10.2017$_REQUEST['urlHeader'];
- person   schedule 12.10.2017file()
, и он возвращает то же самое false. Затемparse_url
, который полностью предназначен для другого использования. - person Common Man   schedule 12.10.2017stream_get_wrappers()
иextension_loaded('openssl')
, например? - person apokryfos   schedule 12.10.2017gethostbyname
означает, что это проблема DNS. Проверьте, можете ли вы пропинговать этот хост. Также рекомендуется предоставить как можно больше информации в вопросе. - person apokryfos   schedule 12.10.2017