Я получаю следующую ошибку, когда пытаюсь запустить свой PHP-скрипт:
не удалось открыть поток: нет такого файла или каталога в C: \ wamp \ www \ LOF \ Data.php в сценарии строки 3:
- Как бы вы запустили запрос на получение через curl на веб-сайте с поддержкой ssl?
- PHP Curl Вход и выборка данных
- Является ли шифрование AJAX для проверки подлинности с помощью jQuery?
- Проверьте, является ли схема URL-адресом HTTP или HTTPS
- Как я могу предотвратить доступ к файлам PHP, если вызывающий абонент не использует HTTPS?
Мой код выглядит следующим образом:
<?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);