file_get_contents()突然无法正常工作

问题描述 投票:1回答:2

这是我的所有代码:

<html>
<body>
<form>
Playlist to Scrape: <input type="text" name="url" placeholder="Playlist URL">
<input type="submit">
</form>


<?php

if(isset($_GET['url'])){

        $source = file_get_contents($_GET['url']);
        $regex = '/<a href="(.*?)" class="gothere pl-button" title="/';

        preg_match_all($regex,$source,$output);
        echo "<textarea cols=100 rows=50>";
        $fullUrl = array();
        foreach($output[1] as $url){
                array_push($fullUrl,"http://soundcloud.com".$url);
        }
        $final = implode(";",$fullUrl);
        echo $final;
        echo "</textarea>";
}else{
        echo "borks";
}


?>
</body>
</html>

昨天,它运作良好。代码应该做的是:获取Soundcloud URL,提取单个歌曲,然后像song1; song2; song3一样打印它们

再一次,昨天工作正常,我没有改变任何事情,我认为......

我试图评论其他代码,只保留$ source = file_get_contents($ _ GET ['url']);并回显$ source,但它返回空白,这让我认为这是file_get_contents的问题。

如果您对发生这种情况的原因有任何疑问,我将不胜感激。谢谢!

php file-get-contents
2个回答
1
投票

您的问题没有足够的信息供别人帮助您。

首先,我愿意

  • 检查脚本是否正确接收URL get参数(var_dump($_GET['url'])
  • 检查PHP从URL中获取的内容(var_dump(file_get_contents($_GET['url']));

我的猜测是你的服务器管理员关闭了FOPEN URL包装器,或者你正在抓取的网站的所有者决定他们不希望你抓取他们的网站,并阻止来自PHP脚本的请求。

它还有助于将错误报告一直向上,并将显示错误设置为1

error_reporting(E_ALL);
ini_set('display_errors', 1);

虽然如果你在没有这个的情况下进行开发,很可能在你的应用程序中有很多工作但警告有价值的代码。

祝好运。


1
投票

可能发生的是在file_get_contents尝试访问的服务器上安装了新的SSL证书。在我们的示例中,目标服务器在其域上从另一个供应商和另一个通配符域安装了新的SSL证书。

更改我们的配置一点点修复了问题。

 $opts = array(
   'http' => array(
     'method' => "GET",
     'header' => "Content-Type: application/json\r\n".
                 "Accept: application/json\r\n",
     'ignore_errors' => true
   ),
   // VVVVV   The extra config that fixed it
   'ssl' => array(
     'verify_peer' => false,
     'verify_peer_name' => false,
   )
   // ^^^^^
 );
 $context = stream_context_create($opts);
 $result = file_get_contents(THE_URL_WITH_A_CHANGED_CERTIFICATE, false, $context);

我发现这个解决方案归功于this answer。它甚至被低估了。

这无疑解释了file_get_contents突然停止工作的事实。

© www.soinside.com 2019 - 2024. All rights reserved.