файл получить содержимое() как исправить ошибку "Не удалось открыть поток", "Такого файла нет"
При попытке запустить свой 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?
5 answers
В URL-адресе отсутствует информация о протоколе. PHP считает, что это путь к файловой системе, и пытается получить доступ к файлу в указанном месте. Однако местоположение на самом деле не существует в вашей файловой системе, и возникает ошибка.
Вам нужно будет добавить http
или https
в начале URL-адреса, с которого вы пытаетесь получить содержимое:
$json = json_decode(file_get_contents('http://...'));
Что касается следующей ошибки:
Не удалось найти оболочку - вы забыли включить ее при настройке PHP?
Ваша установка Apache, вероятно, не была скомпилирована с поддержкой SSL. Вы можете вручную попытаться установить OpenSSL и использовать его или использовать 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);