2013-12-13 23 views
15

benim PHP komut dosyası çalıştırmayı denediğinizde aşağıdaki hatayı alıyorum "akımını açılamadı" :file_get_contents() hatayı düzeltmek için nasıl "Böyle bir dosya"

<?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); 

?> 

Not: *key* URL (benim API anahtarı) bir dize yerine geçer ve gizlilik nedeniyle gizlendi.

Bir hata oluşmaması için URL'den https:// kaldırdım.

Burada yanlış bir şey yapıyorum? Belki de URL?

+1

8815 görüş ve -2 derece? Birisi bunu faydalı bulmalı. – easymoden00b

+0

Sıklıkla bu hatayı giderir ve hızlı bir şekilde sorunu gidermek için şu adımları izleyin: https://stackoverflow.com/a/36577021/2873507 –

cevap

24

URL'de protokol bilgisi eksik. PHP bir dosya sistemi yolu olduğunu düşünüyor ve belirtilen konuma dosyaya erişmeye çalışıyor. Ancak, dosya sisteminizde konum aslında bulunmuyor ve bir hata atılıyor.

Sen içeriğini almaya çalıştığınız URL başında http veya https eklemeniz gerekir: Aşağıdaki hata gelince

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

:

Unable to find the wrapper - did you forget to enable it when you configured PHP?

Sizin Apache kurulumu muhtemelen SSL desteği ile derlenmedi. OpenSSL'yi yüklemeyi ve onu kullanmayı deneyebilir veya cURL kullanabilirsiniz. Kişisel olarak file_get_contents() üzerinden cURL tercih ederim. Burada kullanabileceğiniz bir fonksiyon var:

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; 
} 

Kullanımı:

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

Şimdi bu sık hata için bir sorun giderme denetim listesi var: https: // stackoverflow. com/a/36577021/2873507 –

2

Neden cURL kullanmıyorsun?

$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); 
} 
} 
+3

Ne cUrl olduğunu bilmiyorum, php sry –

+0

için yeni biliyorum Bu sadece bir PHP uzantısı, bunu etkinleştirmeniz gerekir.Muhtemelen varsayılan olarak etkinleştirilmiştir. Neyse, burada bir göz var .. http://www.tomjepson.co.uk/enabling-curl-in-php-php-ini-wamp-xamp-ubuntu/ –

1

Bu

<?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); 
?> 

"./" geçerli dizinden url arama yapmanızı sağlayan kullanarak deneyebilirsiniz. Sen yol kök dizinden göreli ise

chdir($_SERVER["DOCUMENT_ROOT"]); 

web sitenizin köküne geçerli çalışma dizini değiştirmek için kullanabilir.

0

sadece basit birim test ile Shankars ve Amals cevapları uzatmak için:

/** 
* 
* 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); 
} 
0

Biz Curl kullanarak bu sorunu çözebilir ....

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); 
İlgili konular