我已经在我的服务器上测试了file_get_contents,它适用于几乎所有网站,并且对于以下特定链接失败,但适用于http://phpfiddle.org/
<?php
$homepage = file_get_contents('http://www.kinopoisk.ru/picture/10006/');
echo $homepage;
?>
我测试了这个链接http://www.kinopoisk.ru,它也适用于我的服务器,我检查了日志,没有该链接的日志。由于主页非常明确地表明在两个站点(我的站点和该站点)都没有禁用file_get_contents,因此如果有人能够找出问题,为什么它在我的页面中不起作用,那就太棒了。 我也尝试了卷曲和相同的空白输出。没有错误。
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://www.kinopoisk.ru/picture/10006/');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
?>
答案 0 :(得分:1)
我查看了两个代码段。
在您的代码使用curl的代码段中,HTTP请求标头如下所示。
GET /picture/10006/ HTTP/1.1
User-Agent: Your application name
Host: www.kinopoisk.ru
Accept: */*
在代码使用file_get_contents的代码段中,HTTP Request标头如下所示。
GET /picture/10006/ HTTP/1.0
Host: www.kinopoisk.ru
这说明如果未设置User-Agent和Accept-Header,www.kinopoisk.ru上的网络服务器没有响应。我将您的第一个代码示例更改为以下内容,现在可以使用了。
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept: */*i\r\n" .
"User-Agent: Your application name\r\n"
));
$context = stream_context_create($opts);
$homepage = file_get_contents('http://www.kinopoisk.ru/picture/10006/',0, $context);
print_r($homepage);
通过查看响应标头,我可以看到www.kinopoisk.ru上的服务器正在使用Nginx,并且很可能配置为在未设置Accept和User-Agent标头时不返回响应。
答案 1 :(得分:0)
使用curl解决但我仍然不知道为什么file_get_contents在一台服务器上工作而不在其他服务器上工作
<?php
$curl_handle=curl_init();
curl_setopt($curl_handle, CURLOPT_URL,'http://www.kinopoisk.ru/picture/10006/');
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, 'Your application name');
$query = curl_exec($curl_handle);
curl_close($curl_handle);
echo $query;
?>