2013-12-13 7 views
15

私は私のPHPスクリプトを実行しようとすると、私は次のエラーを取得しています:以下のようにのfile_get_contents()どのようにエラーを修正するには、「ストリームをオープンに失敗しました」、「そのようなファイル」

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

私のコードです:

<?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キー)で文字列の置き換えで、プライバシー上の理由のために隠されています。

URLからhttps://を削除して、エラーが1つ表示されるようにしました。

ここで何か問題がありますか?たぶんURL?

+1

8815ビューおよび-2の評価を?誰かがこれを見つける必要があります。 – easymoden00b

+0

このエラーが頻繁に発生し、すぐにトラブルシューティングを行うには、次の手順を実行します。https://stackoverflow.com/a/36577021/2873507 –

答えて

24

URLにプロトコル情報がありません。 PHPはファイルシステムのパスだと考え、指定された場所にあるファイルにアクセスしようとします。しかし、実際にはファイルシステムにその場所が存在せず、エラーがスローされます。次のエラーについては

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

:あなたはあなたからのコンテンツを取得しようとしているURLの先頭にhttpまたはhttpsを追加する必要があります

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

あなたApacheのインストールはおそらくSSLサポートでコンパイルされませんでした。手動でOpenSSLをインストールして使用するか、cURLを使用することができます。私は個人的にはfile_get_contents()以上のcURLを好む。ここでは、使用できる機能です。

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

使用法:あなたはcURLを使用していないのはなぜ

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

ここで頻繁に発生するエラーのトラブルシューティングチェックリストがここにあります:https:// stackoverflow。 com/a/36577021/2873507 –

2

$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

私は何かを知っていません、私はちょっとPHPの初心者です –

+0

それはPHPの単なる拡張です、あなたはそれを有効にする必要があります。ほとんどの場合、デフォルトで有効になっているはずです。とにかくここに見て.. http://www.tomjepson.co.uk/enabling-curl-in-php-php-ini-wamp-xamp-ubuntu/ –

1

あなたは "./" は現在のディレクトリからのURLを検索することができます。この

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

を使用してみてください。 あなたは、パスがルートディレクトリからの相対である場合は、Webサイトのルートに現在の作業ディレクトリを変更する

chdir($_SERVER["DOCUMENT_ROOT"]); 

を使用することができます。

0

だけのシンプルなユニットテストでShankarsとamalsに答えを拡張する:

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

我々はカールを使用してこの問題を解決することができます....

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); 
関連する問題