这是我的所有代码:
<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的问题。
如果您对发生这种情况的原因有任何疑问,我将不胜感激。谢谢!
您的问题没有足够的信息供别人帮助您。
首先,我愿意
var_dump($_GET['url'])
)var_dump(file_get_contents($_GET['url']))
;我的猜测是你的服务器管理员关闭了FOPEN URL包装器,或者你正在抓取的网站的所有者决定他们不希望你抓取他们的网站,并阻止来自PHP脚本的请求。
它还有助于将错误报告一直向上,并将显示错误设置为1
error_reporting(E_ALL);
ini_set('display_errors', 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
突然停止工作的事实。