2013-12-13 11 views
15

Dostaję następujący błąd, gdy próbuję uruchomić mój skrypt PHP:file_get_contents(), jak naprawić błąd „Failed to open stream”, „Nie ma takiego pliku”

failed to open stream: No such file or directory in C:\wamp\www\LOF\Data.php on line 3 script:

mojego kodu jest następująco :

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

?> 

Uwaga: *key* zastępuje ciąg w adresie URL (mój klucz API) i została ukryta ze względów ochrony prywatności.

Usunąłem https:// z adresu URL, aby jeden błąd zniknął.

Czy robię coś nie tak? Może adres URL?

+1

8815 widoki i -2 rating? Ktoś musi to uznać za przydatne. – easymoden00b

+0

Jeden często pojawia się ten błąd i szybko go rozwiązać, wykonaj następujące kroki: https://stackoverflow.com/a/36577021/2873507 –

Odpowiedz

24

W adresie brakuje informacji o protokole. PHP uważa, że ​​jest to ścieżka do systemu plików i próbuje uzyskać dostęp do pliku w określonej lokalizacji. Jednak lokalizacja nie istnieje w systemie plików i zgłoszony zostanie błąd.

Musisz dodać http lub https na początku adresu URL, który próbujesz uzyskać zawartość z:

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

jak dla następującego błędu:

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

Twój Instalacja Apache prawdopodobnie nie została skompilowana z obsługą SSL. Możesz ręcznie spróbować zainstalować OpenSSL i użyć go lub użyć cURL. Osobiście preferuję cURL ponad file_get_contents(). Oto funkcja można użyć:

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

Zastosowanie:

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

Istnieje teraz lista kontrolna rozwiązywania problemów dla tego częstego błędu tutaj: https: // stackoverflow. com/a/36577021/2873507 –

2

Dlaczego nie używacie 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); 
} 
} 
+3

Nie wiem co to jest cUrl, to jest trochę nowe dla php sry –

+0

To tylko rozszerzenie PHP, musisz go włączyć.Najprawdopodobniej byłby domyślnie włączony. W każdym razie zajrzyj tutaj .. http://www.tomjepson.co.uk/enabling-curl-in-php-php-ini-wamp-xamp-ubuntu/ –

1

może spróbować użyć tego

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

"./" umożliwia wyszukiwanie URL z bieżącego katalogu. Można użyć

chdir($_SERVER["DOCUMENT_ROOT"]); 

zmienić bieżący katalog roboczy do korzeni swojej stronie, jeśli ścieżka jest względna od katalogu głównego.

0

tylko przedłużyć Shankars i Åmåls odpowiedzi z prostych testów jednostkowych:

/** 
* 
* 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

Możemy rozwiązać ten problem przy użyciu 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); 
Powiązane problemy