【问题标题】:Get current page title without loop获取当前页面标题而不循环
【发布时间】:2013-05-30 15:05:50
【问题描述】:

我有一个小脚本,它应该获取脚本添加到的当前页面的元标题。问题是,它在几个测试页面上都可以正常工作,但在我的 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;?>

【问题讨论】:

  • “循环至死”是什么意思?您将不得不调试正在发生的事情,我们无法猜测......完成了哪些请求=日志说什么?
  • 修改你的代码以包含导致你悲伤的循环,听起来你有一个导致无限循环的错误条件。
  • 此外,您永远不会检查您对 file() 的调用是否成功,恕我直言,使用基于文件的函数通过 HTTP 检索数据总是一个坏主意。使用cURL。我知道与文件操作相比,这很尴尬,但它更能容忍 HTTP 会话期间发生的奇怪废话,并且可以正确报告特定错误,而不仅仅是返回 false
  • 你为什么还要向你所在的页面发出请求?页面不应该已经知道自己的标题吗?

标签: php title


【解决方案1】:

$_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 变量中的 ? 符号

【讨论】:

    【解决方案2】:

    我正在使用这个函数来获取当前页面的url:

    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 可能会使用 url 重写,这可能会导致您的 $_GET['ignore'] 变量丢失:例如,如果您已经有其他 GET 变量.
    您应该查看您的 .htaccess 文件,或阅读您的 CMS 文档以了解哪些内容可以更改您的网址。

    无论如何,您似乎正在构建一些不稳定的代码,而这只是为了获取页面标题。我很确定您还有另一种方法可以通过您的 CMS 轻松获得它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2013-11-24
      • 2012-03-02
      相关资源
      最近更新 更多