我尝试运行PHP脚本时收到以下错误:
无法打开流:第3行的C:\ wamp \ www \ LOF \ Data.php中没有此类文件或目录 脚本:
我的代码如下:
<?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?
答案 0 :(得分:29)
URL缺少协议信息。 PHP认为它是一个文件系统路径,并尝试访问指定位置的文件。但是,该位置实际上并不存在于您的文件系统中,并且会引发错误。
您需要在要尝试获取内容的网址的开头添加http
或https
:
$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));
答案 1 :(得分:1)
为什么不使用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);
}
}
答案 2 :(得分:1)
您可以尝试使用此
<?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"]);
如果路径与根目录相对,则将当前工作目录更改为您网站的根目录。
答案 3 :(得分:0)
只需通过简单的单元测试来扩展Shankars和amals的答案:
id
答案 4 :(得分: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);
答案 5 :(得分:0)
我希望以下解决方案对您都有效,因为我的网站也遇到同样的问题...
对于:$json = json_decode(file_get_contents('http://...'));
替换为以下查询
$Details= unserialize(file_get_contents('http://......'));
答案 6 :(得分:0)
此错误的实际问题与file_get_content无关,问题在于所请求的url(如果该URL不会抛出页面内容并将请求重定向到其他地方,file_get_content表示“无法打开流”,只是在file_get_contents检查url是否正常工作和不重定向之前,这里是代码:
功能checkRedirect404($ url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
$out = curl_exec($ch);
// line endings is the wonkiest piece of this whole thing
$out = str_replace("\r", "", $out);
// only look at the headers
$headers_end = strpos($out, "\n\n");
if( $headers_end !== false ) {
$out = substr($out, 0, $headers_end);
}
$headers = explode("\n", $out);
foreach($headers as $header) {
if( substr($header, 0, 10) == "Location: " ) {
$target = substr($header, 10);
//echo "Redirects: $target<br>";
return true;
}
}
return false;
}
答案 7 :(得分:0)
我只是通过在url中编码参数来解决这个问题。
网址可能是:http://abc/dgdc.php?p1=Hello&p2=some words
我们只需要对params2进行编码。
$params2 = "some words";
$params2 = urlencode($params2);
$url = "http://abc/dgdc.php?p1=djkl&p2=$params2"
$result = file_get_contents($url);