网址和标题与PHP片段

时间:2010-09-08 12:59:20

标签: php

我读过几篇类似的帖子,但我没有看到我的错。

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/

http://127.0.0.1/test/Can't open HTTP_REFERER.

任何提示都表示赞赏。

4 个答案:

答案 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){}
    }