无循环获取当前页面标题

时间:2013-05-30 15:05:51

标签: php title

我有一个小脚本,应该获取脚本添加到当前页面的元标题。问题是,它在几个测试页面上工作正常,但不在我的CMS中。它会循环直到那里死亡,我无法访问我的服务器上的任何页面,直到我完全重新启动apache并关闭脚本。

是的,有人可以看看吗?这真是太棒了,因为我使用谷歌数小时确定,我找到了X线程和页面,但从来没有解决这种特殊的循环效果。

<?php
function curPageURL() {
    $pageURL = 'http';
    $pageURL .= "://";
    if ($_SERVER["SERVER_PORT"] != "80") {
        $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
    } else {
        $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
    }
    return $pageURL;
}
?>
<?php
if (!isset($_GET['ignore']))
{
    $url = curPageURL();
    $data = implode("", file("$url?ignore=this"));
    preg_match ("/<title>([^`]*?)<\/title>/", $data, $match);
    $urltitle = $match[1];
}
?>
<?echo $urltitle;?>

2 个答案:

答案 0 :(得分:3)

$_SERVER["REQUEST_URI"]还可以包含GET参数:

mysite.com?param1=1&param2=2

然后你尝试附加一个字符串?ignore=this,这样你就得到了

mysite.com?param1=1&param2=2?ignore=this

由PHP翻译成像

这样的变量
param1 = '1'
param2 = '2?ignore=this'

您必须在$ url变量

中检查?符号

答案 1 :(得分:0)

我正在使用此功能获取当前页面网址:

function currentURL() {
    $protocol = stripos($_SERVER['SERVER_PROTOCOL'], 'https') === FALSE ? 'http' : 'https';
    $host     = $_SERVER['SERVER_NAME'];
    $port     = $_SERVER["SERVER_PORT"];
    $query    = $_SERVER['REQUEST_URI'];
    return $protocol.'://'.$host.($port != 80 ? ':'.$port : '').$query;
}

但你的问题来自这里:

if (!isset($_GET['ignore']))
{
    $url = curPageURL();
    $data = implode("", file("$url?ignore=this"));
    /* ... */
}

这适用于“测试页”,但CMS可以使用网址重写,可以导致$_GET['ignore']变量丢失:如果您已经有其他GET变量例如。
您应该查看.htaccess文件,或阅读CMS文档以了解可以改变您的网址。

无论如何,似乎你正在构建一些不稳定的代码,这只是为了得到页面标题。我很确定你有另一种方法可以轻松地使用你的CMS。