我读过几篇类似的帖子,但我没有看到我的错。
index.php看起来像:
<head>
<title>Demo Title</title>
</head>
<body>
<?php
require_once "footer.php";
?>
</body>
footer.php看起来像:
<?php
/*
* _$ Rev. : 08 Sep 2010 14:52:26 $_
* footer.php
*/
$host = $_SERVER['SERVER_NAME'];
$param = $_SERVER ['REQUEST_URI'];
$url = "http://".$host.$param;
echo $url;
$file = @ fopen($_SERVER[$url],"r") or die ("Can't open HTTP_REFERER.");
$text = fread($file,16384);
if (preg_match('/<title>(.*?)<\/title>/is',$text,$found)) {
$title = $found[1];
} else {
$title = " -- no title found -- ";
}
?>
对网址http://127.0.0.1/test/index.php的请求会导致:
http://127.0.0.1/test/index.phpCan't open HTTP_REFERER.
http://127.0.0.1/test/Can't open HTTP_REFERER.
任何提示都表示赞赏。
答案 0 :(得分:2)
$ _ SERVER是一个包含许多与服务器配置相关的字段的数组。它不包含名为“http://”。$ host。$ param的元素,因此尝试将其作为文件名打开将导致fopen调用失败,从而转到die()语句。
更有可能你想要做的就是打开名为“http://”的文件。$ host。$ param。如果这是你想要的,那么只需删除$ _SERVER []位,它应该会更好。
请注意,因为它是一个URL,您需要使用PHP配置来允许使用fopen()打开远程文件。默认情况下,PHP并不总是以这种方式配置,因为它可能存在安全风险。您的开发机器也可能与您最终部署到的系统的配置不同。如果您发现无法使用fopen()打开远程URL,则可以使用CURL等替代方法,但它们并不像简单的fopen()调用那么简单。
另外,如果您正在读取整个文件,您可能需要考虑file_get_contents()而不是fopen()和fread(),因为它将整个文件替换为单个函数调用。
答案 1 :(得分:1)
试试这个:
$file = @ fopen($url,"r") or die ("Can't open HTTP_REFERER.");
答案 2 :(得分:0)
尝试
<?php
$dom = new DOMDocument();
$host = $_SERVER['SERVER_NAME'];
$param = $_SERVER ['REQUEST_URI'];
$url = "http://".$host.$param;
echo 'getting title for page: "' . $url . '"';
$dom->loadHTML($url);
$dom->getElementsByTagName('title');
if ($dom->length)
{
$title = $dom->item(0);
echo $title;
}
else
{
echo 'title tag not found';
}
?>
答案 3 :(得分:0)
我可以看到您尝试跟踪推介的标题
您需要使用$_SERVER['HTTP_REFERER'];
来获取
你想做的是这样的事情
$referrer = (!empty($_SERVER['HTTP_REFERER']) && !substr($_SERVER['SERVER_NAME']) ? $_SERVER['HTTP_REFERER'] : false);
if($referrer)
{
try
{
if(false !== ($resource = fopen($referrer,"r")))
{
$contents = '';
while($contents .= fread($resource,128))
{}
if(preg_match('/<title>(.*?)<\/title>/is',$contents,$found))
{
echo 'Referrer: ' $found[1];
}
}
}catch(Exception $e){}
}