我试图使用PHP从同一站点读取页面。我遇到了这个good discussion并决定使用建议的 cURL 方法:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => false, // don't return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
//Now get the webpage
$data = get_web_page( "https://www.google.com/" );
//Display the data (optional)
echo "<pre>" . $data['content'] . "</pre>";
所以,就我而言,我这样称呼get_web_page
:
$target_url = "http://" . $_SERVER['SERVER_NAME'] . "/press-release/index.html";
$page = get_web_page($target_url);
我无法理解的是它在我的所有测试服务器上工作但只有一个。我已经验证了 cURL 在相关服务器上可用。另外,设置`$ target_url =“http://www.google.com”工作正常。所以,我非常肯定罪魁祸首与 cURL 库无关。
是否可以因为某些服务器阻止自己被这种类型的脚本“抓取”?或者,也许我只是错过了一些东西?
事先谢谢。
类似的问题:
答案 0 :(得分:2)
$ target_url =“http://”。 $ _SERVER ['SERVER_NAME']。 “/press-release/index.html”;
我不确定上面的表达式实际上是否为您返回了正确的网址,
这可能是所有问题的原因。
是否可以因为某些服务器阻止自己被这种类型的脚本“抓取”?
是的,可能是。
但是我没有答案,因为你没有提供实施细节
这是您的网站,您应该可以查看。
在一般情况下,我会说这是一个坏主意,
如果您尝试访问同一域中的其他页面,请执行
你可以简单地做file_get_contents(PATH_TO_FILE.'/press-release/index.html');
(通过扩展HTML判断,我认为是静态页面)
如果该页面需要一些PHP处理,
好吧,你只需要准备所有必要的变量......然后需要文件。
答案 1 :(得分:0)
尝试使用HTTP_HOST而不是SERVER_NAME。它们并不完全相同。
答案 2 :(得分:0)
事实证明,上述脚本没有任何问题。是的,$target_url = "http://" . $_SERVER['SERVER_NAME'] . "/press-release/index.html";
返回了预期值(由@ajreal在他的回答中提出质疑)。
问题实际上是由于IP(目标页面)的解析方式,这使得这个问题的答案与PHP和Apache无关:当我在被测服务器上运行脚本时,返回的IP地址无法访问。请参阅此more detailed explanation /讨论。
一个消息:请先从命令行尝试curl -v
,这可能会为您提供有用的线索。