这是我的所有代码:
<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的问题。
如果您对发生这种情况的原因有任何疑问,我将不胜感激。谢谢!
答案 0 :(得分:1)
您的问题没有足够的信息供别人帮助您。
首先,我会
var_dump($_GET['url'])
)var_dump(file_get_contents($_GET['url']))
; 我的猜测是您的服务器管理员关闭了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/