file_get_contents()突然无法正常工作

时间:2014-09-22 21:29:12

标签: php file-get-contents

这是我的所有代码:

<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 [&#39; url&#39;]);并回显$ source,但它返回空白,这让我认为这是file_get_contents的问题。

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

3 个答案:

答案 0 :(得分:1)

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

首先,我会

  • 检查脚本是否正确接收了URL get参数(var_dump($_GET['url'])
  • 检查来自网址(var_dump(file_get_contents($_GET['url']));
  • )的PHP内容

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

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

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

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

祝你好运。

答案 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 突然停止工作的事实。

答案 2 :(得分:0)

在我的情况下(我也经常下载一页而不是下载soundcloud),这是因为在服务器上检测到F5“ bobcmn” Javascript。

当我在自己的php脚本中写诸如var_dump($source);之类的东西-查看发送的服务器时-然后我看到响应以以下代码开头:window[“bobcmn”] = ...

更多信息: https://blog.dotnetframework.org/2017/10/10/understanding-f5-bobcmn-javascript-detection/