file_get_contents () как исправить ошибку «Не удалось открыть поток», «Нет такого файла»,

Я получаю следующую ошибку, когда пытаюсь запустить свой PHP-скрипт:

не удалось открыть поток: нет такого файла или каталога в C: \ wamp \ www \ LOF \ Data.php в сценарии строки 3:

Мой код выглядит следующим образом:

<?php $json = json_decode(file_get_contents('prod.api.pvp.net/api/lol/euw/v1.1/game/by-summoner/20986461/recent?api_key=*key*')); print_r($json); ?> 

Примечание: *key* является заменой строки в URL-адресе (мой ключ API) и скрыт в целях конфиденциальности.

Я удалил https:// из URL-адреса, чтобы удалить одну ошибку.

Я здесь что-то не так? Может быть, URL?

В URL-адресе отсутствует информация о протоколе. PHP считает, что это путь к файловой системе и пытается получить доступ к файлу в указанном месте. Однако это место фактически не существует в вашей файловой системе и возникает ошибка.

Вам нужно будет добавить http или https в начале URL-адреса, с которого вы пытаетесь получить содержимое:

 $json = json_decode(file_get_contents('http://...')); 

Что касается следующей ошибки:

Не удалось найти оболочку – вы забыли включить ее при настройке PHP?

Возможно, ваша установка Apache не была скомпилирована с поддержкой SSL. Вы можете вручную попытаться установить OpenSSL и использовать его или использовать cURL. Я лично предпочитаю cURL над file_get_contents() . Вот функция, которую вы можете использовать:

 function curl_get_contents($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); curl_close($ch); return $data; } 

Применение:

 $url = 'https://...'; $json = json_decode(curl_get_contents($url)); 

Почему вы не используете cURL ?

 $yourkey="your api key"; $url="https://prod.api.pvp.net/api/lol/euw/v1.1/game/by-summoner/20986461/recent?api_key=$yourkey"; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); $auth = curl_exec($curl); if($auth) { $json = json_decode($auth); print_r($json); } } 

Вы можете попробовать использовать это

 <?php $json = json_decode(file_get_contents('./prod.api.pvp.net/api/lol/euw/v1.1/game/by-summoner/20986461/recent?api_key=*key*')); print_r($json); ?> 

«./» позволяет искать url из текущего каталога. Вы можете использовать

 chdir($_SERVER["DOCUMENT_ROOT"]); 

изменить текущий рабочий каталог на корневой каталог вашего сайта, если путь относительный от корневого каталога.

просто чтобы продлить ответы Шанкаров и амалов простым модульным тестированием:

 /** * * workaround HTTPS problems with file_get_contents * * @param $url * @return boolean|string */ function curl_get_contents($url) { $data = FALSE; if (filter_var($url, FILTER_VALIDATE_URL)) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); $data = curl_exec($ch); curl_close($ch); } return $data; } // then in the unit tests: public function test_curl_get_contents() { $this->assertFalse(curl_get_contents(NULL)); $this->assertFalse(curl_get_contents('foo')); $this->assertTrue(strlen(curl_get_contents('https://www.google.com')) > 0); } 

Мы можем решить эту проблему, используя Curl ….

 function my_curl_fun($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $data = curl_exec($ch); curl_close($ch); return $data; } $feed = 'http://................'; /* Insert URL here */ $data = my_curl_fun($feed);